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. 转--Android按钮单击事件的四种常用写法总结

    这篇文章主要介绍了Android按钮单击事件的四种常用写法总结,比较了常见的四种写法的优劣,有不错的参考借鉴价值,需要的朋友可以参考下     很多学习Android程序设计的人都会发现每个人对代码的 ...

  2. Java链式方法 连贯接口(fluent interface)

    有两种情况可运用链式方法: 第一种  除最后一个方法外,每个方法都返回一个对象 object2 = object1.method1(); object3 = object2.method2(); ob ...

  3. mysql中游标的使用

    BEGIN #遍历占领野地表还原军队 # and cityid=cityid) ,) ;#occupyWild表的TroopsId ,) ;#occupyWild表的CityId ,) ;#occup ...

  4. 30天轻松学习javaweb_模拟tomcat

    运行 javac Server.java 编译java文件 执行 java Server 运行程序 在ie中输入 http://localhost:9999/ 打开模拟的服务程序 import jav ...

  5. C语言位运算符及作用:与、或、异或、取反、左移和右移

    一.& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0应用:(1)清零 若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:原来的数 ...

  6. C++学习49 对二进制文件的读写操作

    二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映像文件.因为文件中的信息不是字符数据,而是字节中的二进制形式的信息,因此它又称为字节文 ...

  7. 有没有一行文件字过多后可以省略号显示,我说的不是用其他样式,BT本身有没有?谢谢

    .text-overflow {display: inline-block;max-width: 200px;overflow: hidden;text-overflow: ellipsis;whit ...

  8. 网站引导页插件intro.js 的用法

    intro.js是一个用于制作网页引导效果的js插件,用法很简单,intro.js.v2.0.rar 1.在需要的页面添加引用 intro.js introjs.css 这两个文件已经足够,但是文件夹 ...

  9. 使用mustache.js 模板引擎输出html

    看了https://mustache.github.io/你就知道mustache是非常强大的模板引擎,支持多种语言,下面是个简单入门例子: MVC Model public class Studen ...

  10. ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别

    spring通过在web.xml 中配置ContextLoaderListener 来加载context配置文件,在DispatcherServlet中也可以来加载spring context配置文件 ...