MVC之Excel导出表格数据
第一步:先把Excel导出的插件(NPOI)引用进来;
第二步:然后通过linq语句查询出需要导出的数据表\集合(list),当然前提是你有引用了数据库实体模型,并实例化了数据库实体;
例如:
在当前类下面实例化实体
Models.GZJSJEntities myModels = new Models.GZJSJEntities();
然后创建一个导出数据的方法,通过页面JavaScript脚本代码调用并执行导出;
1、通过linq查询数据列表\表格
2、写完linq查询语句接着写导出表格的准备工作,创建Excel对象,以及Excel对象工作簿
//第一步:创建Excel对象
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
//第二步:创建Excel对象的工作簿
NPOI.SS.UserModel.ISheet sheet = book.CreateSheet();
3、设置Excel表头,添加表头的列,例如:
#region Excel表头设置
//给sheet添加第一行的头部标题
NPOI.SS.UserModel.IRow row1 = sheet.CreateRow(0);//创建行
//创建列
row1.CreateCell(0).SetCellValue("出库单号");
row1.CreateCell(1).SetCellValue("出库人");
row1.CreateCell(2).SetCellValue("请领单位");
row1.CreateCell(3).SetCellValue("药品名称");
row1.CreateCell(4).SetCellValue("药品分类");
row1.CreateCell(5).SetCellValue("药品单位");
row1.CreateCell(6).SetCellValue("出库数量");
row1.CreateCell(7).SetCellValue("零售价金额");
row1.CreateCell(8).SetCellValue("进货价");
row1.CreateCell(11).SetCellValue("药品批号");
row1.CreateCell(12).SetCellValue("有效期");
row1.CreateCell(13).SetCellValue("规格");
row1.CreateCell(14).SetCellValue("出库日期");
#endregion
然后循环遍历拿刚刚linq中查询出来的列表给工作簿的每行、列添加数据;
for (int i = 0; i < listOutBankDetail.Count; i++)
{
NPOI.SS.UserModel.IRow row = sheet.CreateRow(i + 1);
row.CreateCell(0).SetCellValue(listOutBankDetail[i].OutBankCode);
row.CreateCell(1).SetCellValue(listOutBankDetail[i].OutBanker);
row.CreateCell(2).SetCellValue(listOutBankDetail[i].Pharmacy);
row.CreateCell(3).SetCellValue(listOutBankDetail[i].DrugName);
row.CreateCell(4).SetCellValue(listOutBankDetail[i].DrugType);
row.CreateCell(5).SetCellValue(listOutBankDetail[i].DrugUnit);
row.CreateCell(6).SetCellValue(listOutBankDetail[i].OutBankCount.ToString());
row.CreateCell(7).SetCellValue(listOutBankDetail[i].ResaleCost.ToString());
row.CreateCell(8).SetCellValue(listOutBankDetail[i].EnterPrice.ToString());
row.CreateCell(12).SetCellValue(listOutBankDetail[i].strInDate);
row.CreateCell(13).SetCellValue(listOutBankDetail[i].Standard);
row.CreateCell(14).SetCellValue(listOutBankDetail[i].strOutBankDate);
}
4、最后就是处理文件,通过流的形式输出:
MemoryStream BookStream = new MemoryStream();//定义文件流 book.Write(BookStream);//将工作薄写入文件流 //输出之前调用Seek(偏移量,游标位置)方法:获取文件流的长度 BookStream.Seek(0, SeekOrigin.Begin); //输出的文件名称 string filename = "出库数据明细" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls"; //返回 return File(BookStream, "application/vnd.ms-excel", filename); // 文件类型/文件名称
以上代码就是导出数据方法中的代码分析了,导出结果大概如图: