Apache POI生成的内容与Excel不同

时间:2016-06-21 14:40:46

标签: java apache-poi

我正在编写一个读取多个.csv文件并减少行数的应用程序。

应用程序的输出是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

1 个答案:

答案 0 :(得分:0)

我记得多年前在Apache POI工作簿中遇到过类似的问题。我认为当将null值写入单元格时,它可能与工作簿的缺失单元格策略有关。您可以尝试使用以下命令设置工作簿缺少单元格策略:

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