NPOI 2.1.3.1生成损坏的XLSX文件

时间:2016-03-13 22:45:54

标签: c# excel npoi

我正在尝试使用NPOI 2.1.3.1从某些数据库数据创建Excel文件。但是,正在创建的文件已损坏。 Excel拒绝打开它,并将其更改为ZIP并尝试提取它也会导致Windows和WinRAR中的错误。我读过的其他帖子说要升级到2.1.3.1,因为它修复了一些关于XLSX创建的东西,但这根本不是真的。我也读过它与ZIP文件的编辑方式有关,但似乎没有任何能力来控制它。我希望有人可以用下面的代码指出我正确的方向:

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

1 个答案:

答案 0 :(得分:2)

几个小时后,我不认为NPOI存在实际问题。我已经切换到EPPlus,它输出了正确的临时文件,但是发送回浏览器的文件仍然被破坏了。最后,我得出结论,这是ASP.NET MVC FileResult实现的一个问题,因为当我覆盖Response对象时,正确的文件被返回给浏览器。有关更多信息,请查看此帖:

ASP.NET MVC FileResult is corrupting files

不幸的是,当我切换到EPPlus时,我已经删除了NPOI代码,因此我无法100%准确地确认它没有真正被窃听。话虽如此,基于EPPlus的行为,我也不认为NPOI存在问题。