c# NOPI匯出excel後 “發現有部分內容有問題 ”
阿新 • • 發佈:2020-08-19
查詢網上的方法發現有以下幾種:
1.workbook.Write(ms)生成的 MemoryStream後,使用了 ms.GetBuffer()返回檔案內容,導致生成的 Excel檔案結尾處有大量的 00(空位元組),改為 ms.ToArray()即可得到正常的檔案了。
2.編碼不一致。可以修改如下:
Response.ContentType = "application/vnd.openxmlformats - officedocument.spreadsheetml.sheet"; Response.AppendHeader("Content-Type", "text/html; charset=GB2312"); Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xlsx", fileName)); Response.Charset = "GB2312"; Response.ContentEncoding = Encoding.GetEncoding("GB2312");
但是這兩種都不是我的問題,最後發現,是流沒有正常關閉。最後加了一句Response.Close(); 問題解決。
具體程式碼示例如下:
/// /// 匯出檔案到瀏覽器 /// /// /// ///檔名稱 private void ExportExcel(XSSFWorkbook workbook, HttpResponse Response, string fileName) { using (var exportData = new MemoryStream()) { workbook.Write(exportData); Response.Buffer = true; Response.Clear(); Response.ClearHeaders(); Response.ClearContent(); //response.ContentType = "application/ms-excel"; Response.ContentType = "application/vnd.openxmlformats - officedocument.spreadsheetml.sheet"; Response.AppendHeader("Content-Type", "text/html; charset=GB2312"); // Response.AddHeader("Content-Length", exportData.Length.ToString()); Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xlsx", fileName)); Response.Charset = "GB2312"; Response.ContentEncoding = Encoding.GetEncoding("GB2312"); Response.BinaryWrite(exportData.ToArray());// ms.ToArray() GetBuffer Response.Flush(); Response.Close(); } }