NPOI 2.1.3.1 создает поврежденные файлы XLSX.

Я пытаюсь использовать 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();
}

person Gup3rSuR4c    schedule 13.03.2016    source источник


Ответы (1)


Через несколько часов я не думаю, что с NPOI возникла реальная проблема. Я переключился на EPPlus, и он выводил правильный временный файл, но файл, который отправлялся обратно в браузер, все еще был поврежден. В конечном итоге я пришел к выводу, что это проблема с реализацией ASP.NET MVC FileResult, потому что, когда я перезаписал объект Response, правильный файл был возвращен в браузер. Для получения дополнительной информации посмотрите этот пост:

ASP.NET MVC FileResult повреждает файлы

К сожалению, я уже вырвал код NPOI, когда переключился на EPPlus, поэтому я не могу со 100% точностью подтвердить, что он действительно не прослушивался. При этом, основываясь на поведении, которое я получил с EPPlus, я не думаю, что была проблема с NPOI.

person Gup3rSuR4c    schedule 14.03.2016