开篇语
废话不多说,直接上遇到的问题
需求:在这个界面点击导出,导出页面数据,苦于没有做过webfrom项目,弄了半天还是没想到原生态的好方法,所以在网上看了下有没有导出的好例子,结果发现有人推荐使用Npoi,抱着强烈的好奇心,就去查了下这个东东,发现果然强大,哈哈,里面集成了很多东西,下面直接进入解决问题正题:
实现过程
①发现项目里面接口方法返回DataTable是带参数的,所以新增了一个无参数的方法
②实现这个方法,重点是将查询到的结果集放大DataTable中
③先去官网:http://npoi.codeplex.com/ 下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用。[因为我的项目就用到了excel导出,所以只添加了这两个dll]
④执行点击事件即可[本项目是点击导出Excel时,执行button3的点击事件]
⑤添加方法(本方法可通用,其中rs是申明的一个全局DataTable ,将接口调用的查询数据库的方法直接返回给rs)
1 NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(); 2 NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("Sheet1"); 3 //设置列的信息 4 5 NPOI.SS.UserModel.IRow headerrow = sheet.CreateRow(0); 6 ICellStyle style = book.CreateCellStyle(); 7 style.Alignment = HorizontalAlignment.Center; 8 style.VerticalAlignment = VerticalAlignment.Center; 9 rs =CMSModelManager.SendInfoManageDAO.GetFirstSendInfoManageByIds(); 10 IRow rowHead = sheet.CreateRow(0); 11 //填写表头 12 for (int i = 0; i < rs.Columns.Count; i++) 13 { 14 rowHead.CreateCell(i, CellType.String).SetCellValue(rs.Columns[i].ColumnName.ToString()); 15 } 16 17 //填写内容 18 for (int i = 0; i < rs.Rows.Count; i++) 19 { 20 IRow row = sheet.CreateRow(i + 1); 21 for (int j = 0; j < rs.Columns.Count; j++) 22 { 23 row.CreateCell(j, CellType.String).SetCellValue(rs.Rows[i][j].ToString()); 24 } 25 } 26 MemoryStream ms = new MemoryStream(); 27 book.Write(ms); 28 Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", HttpUtility.UrlEncode("寄件信息表" + "_" + DateTime.Now.ToString("yyyy-MM-dd"), System.Text.Encoding.UTF8))); 29 Response.BinaryWrite(ms.ToArray()); 30 Response.End(); 31 book = null; 32 ms.Close(); 33 ms.Dispose();
⑥效果
本文完