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的理解

 

posted @ 2016-10-24 17:38  港城大白鲨  阅读(10016)  评论(3编辑  收藏  举报