赞
踩
总渴望去拥有那些自己没有的东西,比如经验、能力;但自己拥有的更为重要的东西,却如此的不珍惜,比如青春。所以啊,趁着青春多写点代码,就能让自己早一步去渴望重新拥有青春了。
有需要的小伙伴可以直接看第二篇 《NPOI 第二篇 设置样式与合并单元格》:
https://blog.csdn.net/wf824284257/article/details/85920867
第二篇的示例代码下载地址:
https://download.csdn.net/download/wf824284257/10899002
工作中,需要将datatable导出到excel。最终的方案是用NPOI来完成这个功能,最后也顺利的完成了。这里把它总结一下。
插一句,有没有小伙伴不知道引用文件是什么意思、引用的是什么东西的?笔者也是最近才反应过来这个问题。引用的是dll文件,而dll文件呢,是后台代码编译之后的二进制机器码文件,windows可直接执行。这里引用别人的dll,就相当于多了一部分后台代码,而且已经编译好了。
我们开始吧。
首先去官网下载NPOI
http://npoi.codeplex.com/releases/
然后解压一下,就有这个了
然后我们打开解压好的文件,打开release文件夹,看到有net20和net40文件夹,这里我们打开net40,可以看到一些dll文件。我们这里只需要引用NPOI.dll和NPOI.OOXML.dll
到VS界面,添加引用,选择刚刚那2个dll,并确定。添加完成后,可以在引用里面看到。
接下来 using这些
using NPOI;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
然后就可以愉快的使用了。
##NPOI的基本使用
页面上放一个button,点击事件是导出excel。
首先我们通过后台代码从数据库获取到datatable,然后利用NPOI将该dataTable导出到excel。
完整代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.SqlClient; using System.Text; using System.IO; using NPOI; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; namespace NPOI_Test1 { public partial class Page1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnExport_Click(object sender, EventArgs e) { SqlConnection cn = new SqlConnection(); cn.ConnectionString = "server=.;uid=sa;pwd=密码不告诉你;database=dawufan"; cn.Open(); string sqlstr = @"select * from interest"; SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; cmd.CommandText = sqlstr; SqlDataReader reader = cmd.ExecuteReader(); DataTable dt = ReaderToTable(reader); ExportExcel(dt); cn.Close(); cn.Dispose(); cmd.Dispose(); reader.Close(); dt.Dispose(); } protected DataTable ReaderToTable(SqlDataReader dr) { DataTable dt = new DataTable(); for (int i = 0; i < dr.FieldCount; i++) { dt.Columns.Add(dr.GetName(i), dr.GetFieldType(i)); } object[] objValues = new object[dr.FieldCount]; while (dr.Read()) { dr.GetValues(objValues); dt.LoadDataRow(objValues, true); } dr.Close(); return dt; } protected void ExportExcel(DataTable dt) { HttpContext curContext = HttpContext.Current; //设置编码及附件格式 curContext.Response.ContentType = "application/vnd.ms-excel"; curContext.Response.ContentEncoding = Encoding.UTF8; curContext.Response.Charset = ""; string fullName = HttpUtility.UrlEncode("FileName.xls", Encoding.UTF8); curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fullName, Encoding.UTF8)); //attachment后面是分号 byte[] data = TableToExcel(dt, fullName).GetBuffer(); curContext.Response.BinaryWrite(TableToExcel(dt, fullName).GetBuffer()); curContext.Response.End(); } public MemoryStream TableToExcel(DataTable dt, string file) { //创建workbook IWorkbook workbook; string fileExt = Path.GetExtension(file).ToLower(); if (fileExt == ".xlsx") workbook = new XSSFWorkbook(); else if (fileExt == ".xls") workbook = new HSSFWorkbook(); else workbook = null; //创建sheet ISheet sheet = workbook.CreateSheet("Sheet1"); //表头 IRow headrow = sheet.CreateRow(0); for (int i = 0; i < dt.Columns.Count; i++) { ICell headcell = headrow.CreateCell(i); headcell.SetCellValue(dt.Columns[i].ColumnName); } //表内数据 for (int i = 0; i < dt.Rows.Count; i++) { IRow row = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { ICell cell = row.CreateCell(j); cell.SetCellValue(dt.Rows[i][j].ToString()); } } //转化为字节数组 MemoryStream ms = new MemoryStream(); workbook.Write(ms); ms.Flush(); ms.Position = 0; return ms; } } }
今天就到这里了,后面会有介绍NPOI设置excel样式,及复杂一点表格如何实现。
《NPOI 第二篇 设置样式与合并单元格》:
https://blog.csdn.net/wf824284257/article/details/85920867
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。