2016-03-13 16 views
2

Я пытаюсь использовать NPOI 2.1.3.1 для создания файла Excel из некоторых данных базы данных. Однако создаваемый файл поврежден. Excel отказывается открывать его, а также заменять его на ZIP и пытается извлечь из него также вызывает ошибки в Windows и WinRAR. Другие темы, которые я прочитал, говорят, чтобы обновить до 2.1.3.1, потому что он исправляет что-то о создании XLSX, но это совсем не так. Я также читал, что он имеет какое-то отношение к тому, как он зашифровывает файл, но, похоже, нет никакой возможности его контролировать. Я надеюсь, что кто-то может мне точку в правильном направлении с моим кодом ниже:NPOI 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(); 
} 

ответ

2

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

ASP.NET MVC FileResult is corrupting files

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

Смежные вопросы