zoukankan      html  css  js  c++  java
  • NPOI 导入导出excel两种方式 和 错误 无法访问已关闭的流解决方式

    平时做项目过程中经常会遇到一些导入导出的功能,今天偶得一小空 整理一下

    (如果有不对的地方还请大家指正,平时解决问题就顺手记录一下,以方便其他的小伙伴参考)

    首先如下基础的项目过程图:

    1.基础的自己构建的html

    2.jQuery.Upload插件

    好,入正题,今天主要记录一下下载机能,以NPOI下载方法为例

    下载其实方法多多,每个人可能都有自己的常用方法,但我感觉下载无非两种方式,

    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.Flush();
                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 NpoiMemoryStream();
                    ms.AllowClose = false;
                    workbook.Write(fs);
                    workbook.Write(ms);
                    ms.Flush();
                    ms.Position = 0;
                    ms.AllowClose = false;
                    return File(ms, "application/vnd.ms-excel", "测试举例.xlsx");

    html中调用

    <a href="/UploadCarInfo/DownLoadBasicInfo" target="ajaxDownload"><i class="fa fa-download"></i> 车型参考</a>
    
    <iframe name="ajaxDownload" style="display:none"></iframe>

    以上都是很基础的,比如其他的一些验证或try catch什么的暂未全部列出,比如有什么公共方法TableToExcel等什么一些公共方法网上一找一大堆,我就未一一列出具体下载细节;

    第二种方式可能会遇到【无法访问已关闭】这样的问题,所以如代码所示NpoiMemoryStream这个类,我继承自MemoryStream这个系统类,重写系统类中 关闭流的那个方法(Close),改为我可以手动控制即可解决问题;

    个人总结:遇到问题往往不是第一时间去解决问题,除非你非常熟悉了;取而代之而是去思考一下问题的解决思路,有的问题无非就那些套路,具体里面怎么解决我想面试的时候 也不会问的非常详细吧......

  • 相关阅读:
    回调函数、Java接口回调 总结
    java 中hashcode和equals 总结
    单一职责原则
    Java初始化理解与总结 转载
    2019-2020-2 20175305张天钰《网络对抗技术》Exp9 Web安全基础
    2019-2020-2 20175305张天钰《网络对抗技术》Exp 8 Web基础
    2019-2020-2 20175305 张天钰《网络对抗技术》Exp7 网络欺诈防范
    2019-2020-2 20175305张天钰《网络对抗技术》Exp6 MSF基础应用
    2019-2020-2 20175305张天钰《网络对抗技术》Exp5 信息搜集与漏洞扫描
    2019-2020-2 20175305张天钰《网络对抗技术》 Exp4 恶意代码分析
  • 原文地址:https://www.cnblogs.com/life512/p/5993867.html
Copyright © 2011-2022 走看看