使用NPOI从数据库中导出数据到Excel
添加NPOI.dll程序集
下面:步骤解析
首先拿到要导出的数据Data,定义好Excel模板(名称:FileName)(可以放在本地)
1、往Excel模板中填充内容
WriteToFile(Data, FileName);
//FileStream 对象读取出来的是字节数组,然后通过编码转换将字节数组转换成字符串。
FileStream file = new FileStream(FileName, FileMode.Open, FileAccess.Read);
FileMode:规定了如何打开或创建文件
FileAccess:指定了流的作用
成员 | 说明 |
---|---|
Read | 打开文件,用于只读 |
Write | 打开文件,用于只写 |
ReadWrite | 打开文件,用于读写 |
1)创建Excel对象
//HSSFWorkbook表示以xls为后缀名的文件,还有XSSFWorkbook
HSSFWorkbook hssfworkbook = new HSSFWorkbook(file);
2)创建页
NPOI.SS.UserModel.ISheet ws = hssfworkbook.createSheet("Attendance");
3)创建行和操作单元格对象
具体内容根据自己的需求来放入数据。
//创建行,Row(0):表头
IRow row = ws.CreateRow(i);
//创建单元格
ICell cell = row.CreateCell(k);
//设置单元格的值
cell.setCellValue("单元格中的中文");
2、在浏览器下载Excel
DownloadFile(this.Page, FileName);
使用刚才写好的FileName
1)以字符流的形式下载文件
FileStream fs = new FileStream(FileName, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
2)通知浏览器下载文件而不是打开
page.Response.ContentType = "application/octet-stream";
page.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(System.IO.Path.GetFileName(strFile).Trim(), System.Text.Encoding.UTF8));
page.Response.BinaryWrite(bytes);
page.Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();