1. 程式人生 > >asp.net NPOI導出xlsx格式文件,打開文件報“Excel 已完成文件級驗證和修復。此工作簿的某些部分可能已被修復或丟棄”

asp.net NPOI導出xlsx格式文件,打開文件報“Excel 已完成文件級驗證和修復。此工作簿的某些部分可能已被修復或丟棄”

tpc com filesize instance ons 讀取 div 技術 i++

NPOI導出xlsx格式文件,會出現如下情況:

技術分享

點擊“是”:

技術分享

導出代碼如下:

/// <summary>
        ///     將datatable數據寫入excel並下載
        /// </summary>
        /// <param name="dt">datatable </param>
        /// <param name="excelName">文件名</param>
        /// <param name="templatePath">模板路徑</param>
        ///
<returns></returns> public static void DataTableToExcelAndDownload(DataTable dt, string excelName, string templatePath) { IWorkbook workbook = null; FileStream fs = null; IRow row = null; ISheet sheet = null; ICell cell
= null; ICellStyle cellStyle = null; try { if (dt != null && dt.Rows.Count > 0) { var rowCount = dt.Rows.Count; //行數 var columnCount = dt.Columns.Count; //列數 using (fs = File.OpenRead(templatePath)) {
//大批量數據導出的時候,需要註意這樣的一個問題,Excel2003格式一個sheet只支持65536行,excel 2007 就比較多,是1048576 //workbook = new HSSFWorkbook(fs);//2003版本.xls workbook = new XSSFWorkbook(fs); // 2007版本.xlsx } if (workbook != null) { sheet = workbook.GetSheetAt(0); //讀取第一個sheet //設置每行每列的單元格, for (var i = 0; i < rowCount; i++) { row = sheet.CreateRow(i + 1); for (var j = 0; j < columnCount; j++) { cell = row.CreateCell(j); var value = dt.Rows[i][j]; var bdType = value.GetType().ToString(); switch (bdType) { case "System.String": cell.SetCellValue(value.ToString()); break; case "System.DateTime": //日期類型 cell.SetCellValue( Convert.ToDateTime(value.ToString()).ToString("yyyy-MM-dd HH:mm:ss")); break; case "System.Int16": //整型 case "System.Int32": case "System.Int64": case "System.Byte": var intV = 0; int.TryParse(value.ToString(), out intV); cell.SetCellValue(intV); break; case "System.Decimal": //浮點型 case "System.Double": double doubV = 0; double.TryParse(value.ToString(), out doubV);//格式化值 cellStyle = workbook.CreateCellStyle(); cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00"); cell.SetCellValue(doubV); cell.CellStyle = cellStyle; break; default: cell.SetCellValue(value.ToString()); break; } } } var context = HttpContext.Current; context.Response.Clear(); context.Response.ContentType = "application/vnd.ms-excel"; context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + excelName); using (var ms = new MemoryStream()) { workbook.Write(ms); long fileSize = ms.Length; //加上設置大小下載下來的.xlsx文件打開時才不會報“Excel 已完成文件級驗證和修復。此工作簿的某些部分可能已被修復或丟棄” context.Response.AddHeader("Content-Length", fileSize.ToString()); context.Response.BinaryWrite(ms.GetBuffer()); context.ApplicationInstance.CompleteRequest(); } } } } catch (Exception ex) { if (fs != null) { fs.Close(); } ExceptionHandling.ExceptionHandler.HandleException(ex); } }

加上設置大小下載下來的.xlsx文件打開時才不會報“Excel 已完成文件級驗證和修復。此工作簿的某些部分可能已被修復或丟棄”

long fileSize = ms.Length;
context.Response.AddHeader("Content-Length", fileSize.ToString());

即可。

asp.net NPOI導出xlsx格式文件,打開文件報“Excel 已完成文件級驗證和修復。此工作簿的某些部分可能已被修復或丟棄”