c# NOPI導出excel後 “發現有部分內容有問題 ”

 

 

查找網上的方法發現有以下幾種:

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();
            }
        }
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章