簡體   English   中英

NPOI 2.1.3.1 產生損壞的 XLSX 文件

[英]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對象時,正確的文件被返回到瀏覽器。 有關更多信息,請查看此帖子:

ASP.NET MVC FileResult 正在損壞文件

不幸的是,當我切換到 EPPlus 時,我已經撕掉了 NPOI 代碼,所以我無法 100% 准確地確認它沒有真正被竊聽。 話雖如此,根據我在 EPPlus 中得到的行為,我認為 NPOI 沒有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM