NPOI 导入导出和Excel版本,错误文件扩展名和文件的格式不匹配

读取时可以自动判断Excel版本

 IWorkbook workbook = NPOI.SS.UserModel.WorkbookFactory.Create(fs); 

调用这个方法,内部自动判断Excel的版本

导出时:

2003之前的版本是

 IWorkbook workbook = new HSSFWorkbook();//// 2003版本

ContentType是application/vnd.ms-excel

2003之后的版本是

Workbook workbook = new XSSFWorkbook();//2007版本

ContentType是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

 

如果写错了,使用office打开会提示,文件扩展名和文件的格式不匹配,但使用WPS打开不会提示。

NPOI 导入导出和Excel版本,错误文件扩展名和文件的格式不匹配_第1张图片

 

 

发现“中转费2018-10-14--20181016140243.xlsx”中的部分内容有问题。是否让我们尽量尝试恢复? 如果您信任此工作簿的源,请单击“是”。解决方法参考

NPOI 导入导出和Excel版本,错误文件扩展名和文件的格式不匹配_第2张图片

核心是

 MemoryStream ms = new MemoryStream();
workbook.Write(ms);
 ms.Close();
ms.Dispose();
System.Web.HttpContext.Current.Response.End();
 public static void ExportByWeb(List list, string strHeaderText, string strFileName, Dictionary FieldNames)
    {     
        ExportToFile temp = new ExportToFile();
        HttpContext curContext = HttpContext.Current;      
        curContext.Response.AddHeader("Content-Disposition",
            "attachment;filename=" + HttpUtility.UrlEncode(strHeaderText + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx", Encoding.UTF8));
        MemoryStream ms = temp.Export(list, strHeaderText, FieldNames);
        //  new AppException("导出文件开始2" + strHeaderText + DateTime.Now + "导出数据量:" + list.Count);
        if (ms != null)
        {
            curContext.Response.BinaryWrite(ms.ToArray());
        }
        //  new AppException("导出文件结束2" + strHeaderText + DateTime.Now + "导出数据量:" + list.Count);
        ms.Close();
        ms.Dispose();
        curContext.Response.End();
    }

 

你可能感兴趣的:(NPOI)