在ASP.Net中,我使用NPOI將保存寫入Excel文檔,並且我剛剛移動到版本2+。它很好地寫入xls,但切換到xlsx更具挑戰性。我的新改進的代碼是將大量的NUL字符添加到輸出文件。將它寫入Response.OutputStream時得到一個損壞的XLSX文件
結果是,Excel抱怨說有「內容有問題」,我希望他們嘗試恢復嗎?
下面是從我的十六進制編輯器創建的xlsx文件的圖片: BadXlsxHexImage這些00s繼續打印幾頁。我從字面上刪除了編輯器中的那些內容,直到文件打開時沒有錯誤。
這段代碼爲什麼會在這個文件中添加如此多的NUL?
using (var exportData = new MemoryStream())
{
workbook.Write(exportData);
byte[] buf = exportData.GetBuffer();
string saveAsFileName = sFileName + ".xlsx";
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}; size={1}", saveAsFileName, buf.Length.ToString()));
Response.Clear();
Response.OutputStream.Write(buf, 0, buf.Length);
exportData.Close();
Response.BufferOutput = true;
Response.Flush();
Response.Close();
}
(我已經到位的OutputStream.Write
,Response.End
試圖BinaryWrite
代替Response.Close
,並與緩衝區的長度設置Content-Length
。另外,這一切都不是寫入XLS的問題。)
如果你想使用其他lib下,這裏是最好的之一,我認爲創建XLSX:https://epplus.codeplex.com/ – andrefadila