开篇语
废话不多说,直接上遇到的问题
需求:在这个界面点击导出,导出页面数据,苦于没有做过webfrom项目,弄了半天还是没想到原生态的好方法,所以在网上看了下有没有导出的好例子,结果发现有人推荐使用Npoi,抱着强烈的好奇心,就去查了下这个东东,发现果然强大,哈哈,里面集成了很多东西,下面直接进入解决问题正题:
实现过程
①发现项目里面接口方法返回DataTable是带参数的,所以新增了一个无参数的方法
②实现这个方法,重点是将查询到的结果集放大DataTable中
③先去官网: 下载需要引入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();
⑥效果
本文完