2016-06-21 19 views
2

我正在編寫一個讀取多個.csv文件並減少行數的應用程序。Apache POI生成的內容不同於Excel

該應用程序的輸出是一個excel文件(.xls)。我們將這個文件作爲BOM上傳到商店。

它適用於除一個商店以外的所有商店。在那家商店我得到一個結果「無法讀取文件」。

偶然發現,如果我在Excel中打開相同的文件,然後再保存它,商店就會接受它。

不知何故,直接生成的文件與打開並保存在Excel中的文件不同。

這是我的代碼:

@Override 
public void writePurchaseList(String path, List<PurchaseItem> list) { 

    Workbook workbook = new HSSFWorkbook(); 

    Sheet studentsSheet = workbook.createSheet("BOM"); 
    final String[] header = new String[] { "quantity", "description","orderNo" }; 

    int rowIndex = 0; 
    int cellIndex = 0; 
    Row row = studentsSheet.createRow(rowIndex++); 
    row.createCell(cellIndex++).setCellValue(header[0]); 
    row.createCell(cellIndex++).setCellValue(header[1]); 
    row.createCell(cellIndex++).setCellValue(header[2]); 

    for(PurchaseItem item : list){ 
     cellIndex = 0; 
     row = studentsSheet.createRow(rowIndex++); 
     row.createCell(cellIndex++).setCellValue(item.getItemQuantity());    
     row.createCell(cellIndex++).setCellValue(item.getDescription()); 
     row.createCell(cellIndex++).setCellValue(item.getOrderNumber()); 
    } 

    try { 
     FileOutputStream fos = new FileOutputStream(path+".xls"); 
     workbook.write(fos); 
     fos.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
    } 

任何人有一個想法是什麼,我做錯了什麼?

// LG

+0

如果您在Excel中打開該文件,並執行另存爲,它的默認格式是什麼?如果您嘗試使用Apache POI 3.15 beta 1(或更新版本)閱讀該文件,是否會獲得更有用的文件類型異常? – Gagravarr

+0

它默認爲* .xls我正在使用3.14。有沒有什麼理由認爲3.15會解決這個問題? –

+0

3.15有更多有用的錯誤消息,如果你給它不支持的文件類型 – Gagravarr

回答

0

我記得有類似的問題很多年前與Apache POI工作簿。我認爲這可能與空值寫入到單元格時工作簿中缺少的單元策略有關。您可以嘗試設置工作簿缺少單元策略:

Workbook workbook = new HSSFWorkbook(); 
workbook.setMissingCellPolicy(Row.MissingCellPolicy.CREATE_NULL_AS_BLANK); 
+0

試過這個。不幫助我。任何其他默認值或策略設置? –

相關問題