NPOI下载:http://files.cnblogs.com/files/gosky/NPOI_2.2.0.0.zip

导入以下5个引用:

ICSharpCode.SharpZipLib.dll

NPOI.dll

NPOI.OOXML.dll

NPOI.OpenXml4Net.dll

NPOI.OpenXmlFormats.dll

1.将Excle数据导入到DataTable中

新建工具类: 根据上传文件后缀名判断 xls使用 ImportExcelFile2003方法 xlsx使用ImportExcelFile2007方法

using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Text;
using NPOI.SS.Formula.Eval;
/// <summary>
/// NPOIExcelHelper 的摘要说明
/// </summary>
public class NPOIExcelHelper
{ public static DataTable ImportExcelFile2007(string filePath)
{ XSSFWorkbook hssfworkbook;
#region//初始化信息
try
{
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new XSSFWorkbook(file);;
}
}
catch (Exception e)
{
throw e;
}
#endregion NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt();;
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();;
DataTable dt = new DataTable();;
rows.MoveNext();; XSSFRow row = (XSSFRow)rows.Current;
for (int j = ; j < (sheet.GetRow().LastCellNum); j++)
{
//dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());;
//将第一列作为列表头
dt.Columns.Add(row.GetCell(j).ToString());;
}
while (rows.MoveNext())
{
row = (XSSFRow)rows.Current;
DataRow dr = dt.NewRow();;
for (int i = ; i < row.LastCellNum; i++)
{
NPOI.SS.UserModel.ICell cell = row.GetCell(i);;
if (cell == null)
{
dr[i] = null;
}
else
{
dr[i] = cell.ToString();;
}
}
dt.Rows.Add(dr);;
}
return dt;
} public static DataTable ImportExcelFile2003(string filePath)
{ HSSFWorkbook hssfworkbook;
#region//初始化信息
try
{
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new HSSFWorkbook(file);;
}
}
catch (Exception e)
{
throw e;
}
#endregion NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt();;
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();;
DataTable dt = new DataTable();;
rows.MoveNext();; HSSFRow row = (HSSFRow)rows.Current;
for (int j = ; j < (sheet.GetRow().LastCellNum); j++)
{
//dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());;
//将第一列作为列表头
dt.Columns.Add(row.GetCell(j).ToString());;
}
while (rows.MoveNext())
{
row = (HSSFRow)rows.Current;
DataRow dr = dt.NewRow();;
for (int i = ; i < row.LastCellNum; i++)
{
NPOI.SS.UserModel.ICell cell = row.GetCell(i);;
if (cell == null)
{
dr[i] = null;
}
else
{
dr[i] = cell.ToString();;
}
}
dt.Rows.Add(dr);;
}
return dt;
} }

2.将数据导出到Excle

引用命名空间:

using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.SS.Formula.Eval;

代码实例:

//创建工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//创建标签
ISheet sheet = workbook.CreateSheet("sheet1");
//新建表头
IRow rowHead = sheet.CreateRow();
rowHead.CreateCell(, CellType.String).SetCellValue("序号");
rowHead.CreateCell(, CellType.String).SetCellValue("学生姓名");
rowHead.CreateCell(, CellType.String).SetCellValue("性别");
rowHead.CreateCell(, CellType.String).SetCellValue("生源地");
rowHead.CreateCell(, CellType.String).SetCellValue("身份证");
rowHead.CreateCell(, CellType.String).SetCellValue("准考证");
rowHead.CreateCell(, CellType.String).SetCellValue("专业名称");
rowHead.CreateCell(, CellType.String).SetCellValue("专业方向");
rowHead.CreateCell(, CellType.String).SetCellValue("来源");
rowHead.CreateCell(, CellType.String).SetCellValue("生源学校");
rowHead.CreateCell(, CellType.String).SetCellValue("审核状态");
rowHead.CreateCell(, CellType.String).SetCellValue("录取状态");
//循环填充内容
for (int i = ; i < table.Rows.Count; i++)
{
IRow row = sheet.CreateRow(i + );
DataRow datarow = table.Rows[i];
row.CreateCell(, CellType.String).SetCellValue(Convert.ToString(datarow["rn"]));
row.CreateCell(, CellType.String).SetCellValue(Convert.ToString(datarow["StuName"]));
row.CreateCell(, CellType.String).SetCellValue(Constants.sex[datarow["StuSex"].ToString()]);
row.CreateCell(, CellType.String).SetCellValue(Constants.stuAddr[datarow["StuProvince"].ToString()] + Constants.stuAddr[datarow["StuCity"].ToString()]);
row.CreateCell(, CellType.String).SetCellValue(Convert.ToString(datarow["StuCardNo"]));
row.CreateCell(, CellType.String).SetCellValue(Convert.ToString(datarow["StuZKNo"]));
row.CreateCell(, CellType.String).SetCellValue(Convert.ToString(datarow["zyname"]));
row.CreateCell(, CellType.String).SetCellValue(Convert.ToString(datarow["zyfx"]));
row.CreateCell(, CellType.String).SetCellValue(Constants.stuFrom[datarow["StuFrom"].ToString()]);
row.CreateCell(, CellType.String).SetCellValue(Convert.ToString(datarow["StuSchool"]));
row.CreateCell(, CellType.String).SetCellValue(Constants.stuState[datarow["State"].ToString()]);
row.CreateCell(, CellType.String).SetCellValue(Constants.stuAdmit[datarow["Admit"].ToString()]);
} System.IO.MemoryStream ms = new System.IO.MemoryStream();
//写入内存
workbook.Write(ms);
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
//输出到客户端
Response.BinaryWrite(ms.ToArray());
workbook = null;
ms.Close();
ms.Dispose();

导出结果如图:

3.将服务器上的文件输出到客户端

//读取文件
FileStream fileStream = new FileStream(Server.MapPath("~/Uploads/test.xlsx"), FileMode.Open);
long fileSize = fileStream.Length;
byte[] fileBuffer = new byte[fileSize];
fileStream.Read(fileBuffer, , (int)fileSize);
//如果不写fileStream.Close()语句,用户在下载过程中选择取消,将不能再次下载
fileStream.Close();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xlsx", DateTime.Now.ToString("yyyyMMdd")));
Response.AddHeader("Content-Length", fileSize.ToString());
Response.BinaryWrite(fileBuffer);
Response.Flush();
Response.Close();

将服务器上 /Uploads/test.xlsx 文件 输出到客户端并使用日期命名

使用NPOI操纵Excle,并输入到客户端的更多相关文章

  1. Excle快速输入√与×

    如何在EXCLE中快速输入√与×呢 很简单的一个小技巧,只需要在EXCLE单元格中输入P(O) 然后将其字体设置为Wingdings 2,接着就出现符号了 不信你可以试试的哦.

  2. NPOI导出Excle

    前端: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" con ...

  3. npoi生成excel流并在客户端下载(html+后台 )

    //前端页面 <body> <input type="button" value="导出Excel" class="button&q ...

  4. Request.ServerVariables 获取服务器或者客户端信息

    本机ip[客户端]:request.servervariables("remote_addr") 从哪个页面转到当前页面的:Request.ServerVariables(&quo ...

  5. PL/SQL连接Oracle客户端步骤

    首先,安装oracle,再安装plsql 打开plsql——>选择“首选项(preferences)”——>输入oracle客户端路径 如下图:

  6. Ubuntu12.04 下svn服务搭建及Windows客户端tortoisesvn的使用

    在Ubuntu服务端搭建apache+svn 在客户端使用Tortoisesvn工具. 第一步 安装SVN $sudo apt-get install subversion 安装成功后系统会自动建立一 ...

  7. androd输入管理系统机制解析

     android的输入管理系统主要完成按键.触摸板.鼠标等输入设备的事件输入,功能包括,输入设备的事件输入及向焦点窗口和焦点视图的事件派发,事件的插入,事件的过滤,事件的拦截等功能. 整个输入系统 ...

  8. Struts2各个功能详解(2)-输入校验和拦截器

    前面知道了struts2的架构图和struts2的自动封装表单参数和数据类型自动转换,今天来学struts2的第三第四个东西,输入校验和拦截器.  一:输入校验 客户端校验进行基本校验,如检验非空字段 ...

  9. 转----ui输入测试数据

    jin'tHackChecker黑测工作室 - 专注于软件安全测试技术研究!(www.AutomationQA.com)常用安全测试用例 建立整体的威胁模型,测试溢出漏洞.信息泄漏.错误处理.SQL ...

随机推荐

  1. code md5

    using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptograph ...

  2. Zabbix监控和分布式部署实施方案

    最近在研究Zabbix监控,由于机房分布在多个城市,因此采用zabbix proxy做为监控方案,在每 个节点部署zabbix proxy,由zabbix proxy收集agentd数据,然后将采集到 ...

  3. 关于DevExpress的GridView.VisibleIndex的赋值问题

    在DevExpress GridControl中,GridView中 如果VisibleIndex=-1,则这列将不会显示(不可见): 如果VisibleIndex>=0,则按照VisibleI ...

  4. 织梦CMS站点favicon.ico图标的放置

    1.在线制作一个ico图标,推荐制作网站:http://ico.55.la/.制作好后,将favicon.ico图标放在站点模板默认目录下的images文件夹里. 2.在index.htm的<h ...

  5. springmvc使用pojo和servlet原生api作为参数

    一.Pojo作为参数: 实体: package com.hy.springmvc.entities; public class User { private String username; priv ...

  6. Javascript同源策略对context.getImageData的影响

    在本机测试HTML5 Canvas程序的时候,如果用context.drawImage()后再用context.getImageData()获取图片像素数据的时候会抛出错:SECURITY_ERR: ...

  7. [SQL]SQL语言入门级教材_SQL语法参考手册(三)

    SQL 语法参考手册 DB2 提供了关连式资料库的查询语言 SQL (Structured Query Language),是一种非常口语化.既易学又易懂的语法. 此语言几乎是每个资料库系统都必须提供 ...

  8. .NET调用Java写的WebServices(可能会碰到的问题)

    1)net中定义的的WebService(返回值和参数都是自定义对象)可以被Java识别并调用,可是在Java中定义的WebService(返回值和参数都是自定义对象),C#客户端可以识别到自定义对象 ...

  9. HDU 4597 Play Game 记忆化DP

    Play Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Proble ...

  10. java中好玩的案例

    1:实现猜数字游戏, 如果没有猜对可以继续输入你猜的数字,如果猜对了停止程序. 最多只能猜三次,如果还剩下最后一次机会的时候要提醒用户. 代码: Random random = new Random( ...