[英]NPOI 2.1.3.1 produces corrupted XLSX files
我正在嘗試使用 NPOI 2.1.3.1 從某些數據庫數據創建 Excel 文件。 但是,正在創建的文件已損壞。 Excel 拒絕打開它,並將其更改為 ZIP 並嘗試提取它也會導致 Windows 和 WinRAR 中出現錯誤。 我讀過的其他線程說要升級到 2.1.3.1,因為它修復了一些關於 XLSX 創建的問題,但這根本不是真的。 我也讀過它與壓縮文件的方式有關,但似乎沒有任何能力來控制它。 我希望有人可以用下面的代碼指出我正確的方向:
public byte[] GetExcelFile(
QueryModel query) {
var orders = Mapper.Map<IList<ExcelListModel>>(Context.Orders.Where(
o =>
o.DateOrdered >= query.Start
&& o.DateOrdered <= query.End));
var workbook = new XSSFWorkbook();
var sheet = workbook.CreateSheet();
for (int i0 = 0, l0 = orders.Count, r = 0; i0 < l0; i0++) {
var order = orders[i0];
for (int i1 = 0, l1 = order.Products.Count; i1 < l1; i1++, r++) {
var row = sheet.CreateRow(r);
var product = order.Products[i1];
row.CreateCell(0).SetCellValue("");
// ...
row.CreateCell(18).SetCellValue("");
}
for (int i1 = 0, l1 = order.Bonuses.Count; i1 < l1; i1++, r++) {
var row = sheet.CreateRow(r);
var bonus = order.Bonuses[i1];
row.CreateCell(0).SetCellValue("");
// ...
row.CreateCell(18).SetCellValue("");
}
}
var memoryStream = new MemoryStream();
workbook.Write(memoryStream);
return memoryStream.ToArray();
}
幾個小時后,我認為 NPOI 沒有實際問題。 我已經切換到 EPPlus,它輸出了一個正確的臨時文件,但發送回瀏覽器的文件仍然損壞。 最終我得出結論,這是 ASP.NET MVC 的FileResult
實現的一個問題,因為當我覆蓋Response
對象時,正確的文件被返回到瀏覽器。 有關更多信息,請查看此帖子:
不幸的是,當我切換到 EPPlus 時,我已經撕掉了 NPOI 代碼,所以我無法 100% 准確地確認它沒有真正被竊聽。 話雖如此,根據我在 EPPlus 中得到的行為,我認為 NPOI 沒有問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.