2016-03-13 99 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,並且它正在輸出正確的臨時文件,但發送回瀏覽器的文件仍然被損壞。最終我得出結論,這是ASP.NET MVC的FileResult實現的問題,因爲當我覆蓋Response對象時,正確的文件被返回給瀏覽器。欲瞭解更多信息,看看這個帖子:

ASP.NET MVC FileResult is corrupting files

不幸的是,我已經拆出來NPOI代碼時,我切換到EPPlus所以我不能100%地確認它是不是真正的竊聽。話雖如此,基於我與EPPlus一起的行爲,我不認爲NPOI存在問題。