如何进行数据的导出?
以前有进行过填写资料并且把资料导出Excel表格,当时就觉得好神奇,又想知道这样的功能是怎么实现的,可是那时的头脑简单,没有知道答案,可是现在我终于知道为什么可以直接导出数据了,其实也不难,主要是要学会运用的方法就可以了。
接下来讲一下步骤,再来看一下实现功能的代码。
步骤:1、先把要导出的数据查询出来;2、创建Excel工作簿;3、在工作簿中创建Excel工作表;4、在工作表中创建表头行;5、在表头行中设置表头标题;6、为Excel表格添加数据;
7、为Excel的文件命名;8、将信息写入内存流;9、调用Seek(偏移量,游标位置) 移动文件读取指针到指定的位置;10、MIME文件类型(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型(指定Content-Type:application/vnd.ms-excel ,浏览器就会提示要下载的文件是excel文件)。
十个步骤实现导出的功能,并不难,接下来看一下代码的写法:
现在我用一个例子来说:(看图)
我需要导出上面表格里面的数据,先给导出按钮一个点击事件,然后再来写请求导出的方法:
function ExportToExcel() {layer.confirm("是否要导出当前表格中的数据,是请点击确定按钮!", { icon: 3, skin:"layui-layer-molv" }, function(layerIndex) {layer.close(layerIndex); //关闭询问框window.open("ExportToExcel); //请求的路径,打开下载的窗口});
}
在控制器的写法:
public ActionResult ExportToExcel(){//查询数据List<PW_Client> listClient = (from tbClient in myModels.PW_Clientorderby tbClient.ClientID descendingselect tbClient).ToList();//创建客户信息的Excel工作簿HSSFWorkbook ClientexcelBook = new HSSFWorkbook();//创建客户信息的工作表NPOI.SS.UserModel.ISheet Clientsheet = ClientexcelBook.CreateSheet("客户信息");//创建客户信息的表头行NPOI.SS.UserModel.IRow Clientrow = Clientsheet.CreateRow(0);//设置客户信息表头Clientrow.CreateCell(0).SetCellValue("编号");Clientrow.CreateCell(1).SetCellValue("名称");Clientrow.CreateCell(2).SetCellValue("应收欠款");Clientrow.CreateCell(3).SetCellValue("单位电话");Clientrow.CreateCell(4).SetCellValue("联系人");Clientrow.CreateCell(5).SetCellValue("联系电话");//为客户信息的Excel表格添加数据for (int i = 0; i < listClient.Count(); i++){//创建客户信息的行NPOI.SS.UserModel.IRow rowTemp = Clientsheet.CreateRow(i + 1);//添加客户信息数据rowTemp.CreateCell(0).SetCellValue(listClient[i].ClientNum);rowTemp.CreateCell(1).SetCellValue(listClient[i].ClientName);rowTemp.CreateCell(2).SetCellValue(Convert.ToInt32(listClient[i].ClientAR));rowTemp.CreateCell(3).SetCellValue(listClient[i].ClientMonadPhone);rowTemp.CreateCell(4).SetCellValue(listClient[i].Clientlinkman);rowTemp.CreateCell(5).SetCellValue(listClient[i].ClientPhone);}//为客户信息的Excel文件命名(拼接了名称、年月日和文件的后缀名)string fileName = "客户信息" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-ffff")+".xls";//将客户信息转化为内存流MemoryStream ExcelStream = new MemoryStream();//将客户信息的Excel文件写入内存流ClientexcelBook.Write(ExcelStream);//输出之前调用Seek(偏移量,游标位置) 移动文件读取指针到指定的位置//Seek(相对位置, 参照位置.开始位置) 第一个参数表示相对位置,第二个参数表示参照位置ExcelStream.Seek(0, SeekOrigin.Begin);//MIME文件类型(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型return File(ExcelStream, "application/vnd.ms-excel", fileName);
}
效果图:
注:在做导入功能之前,要把引用一个东西,名为NPOI.dll,否则无法完成导出的功能。