NPOI 导入导出excel两种方式 和 错误 无法访问已关闭的流解决方式
【无法访问已关闭的流】的原因是流关闭了,在方法结束后流会自动被垃圾回收,我们不用手动关闭。
解决办法:把流的主动关闭代码注释即可解决! //ms.close();//错误示例,不要关闭流
项目中基础的UI图:
1.基础的自己构建的html
2.jQuery.Upload插件
好,入正题,今天主要记录一下下载功能,以NPOI下载方法为例
分享以下两种方式:
1.直接手动生成文档,填充数据,下载
2.读取现有文档,填充数据,下载,较为推荐!
1.直接手动生成一份文档,填充数据,下载
HSSFWorkbook book = new HSSFWorkbook(); ISheet sheet = book.CreateSheet("举例下载"); sheet.SetColumnWidth(0,16*256);//设置第一列的宽度 sheet.SetColumnWidth(1,12 * 256);//设置第二列的宽度 for (int rowId = 0; rowId <= 10; rowId++) { IRow row = sheet.CreateRow(rowId); for (int i = 0; i < 2; i++) { ICell cell = row.CreateCell(i); cell.SetCellType(CellType.String); cell.SetCellValue("测试"+i); } } var ms = new MemoryStream(); book.Write(ms); ms.Position = 0; string fileName = "测试举例.xls"; return File(ms, "application/vnd.ms-excel", fileName);
2.加载预定义的一份模板文件,填充数据,下载
//读模板的方式加载 string filePath = System.Web.HttpContext.Current.Server.MapPath("~/Template/BasicInfoTemplete.xlsx"); IWorkbook workbook; FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read); workbook = WorkbookFactory.Create(fs); ISheet sheet = workbook.GetSheetAt(0);//获取Excel中的第一个Sheet ICellStyle cellStyle = workbook.CreateCellStyle(); //设置单元格上下左右边框线 cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; //文字水平和垂直对齐方式 cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; ICell Cell = null; IRow row = null; for (int i = 2; i < 10; i++) { row = sheet.CreateRow(i); for (int j = 1; j <= 5; j++) { Cell = row.CreateCell(j); Cell.CellStyle = cellStyle; Cell.SetCellValue(i+"测试举例"+j); } }
var ms = new MemoryStream();
book.Write(ms);
ms.Position = 0;
ms.close();//错误示例,不要关闭流
string fileName = "测试举例.xls";
return File(ms, "application/vnd.ms-excel", fileName);
html中调用
<a href="/UploadCarInfo/DownLoadBasicInfo" target="ajaxDownload"><i class="fa fa-download"></i> 车型参考</a> <iframe name="ajaxDownload" style="display:none"></iframe>
文中涉及考点:Stream的理解