Java ApachePOI生成的内容与Excel不同

Java ApachePOI生成的内容与Excel不同,java,apache-poi,Java,Apache Poi,我正在编写一个应用程序,它可以读取多个.csv文件并减少行数 应用程序的输出是excel文件(.xls)。此文件以BOM的形式上载到商店 它适用于除一家以外的所有商店。在那个商店我得到一个结果“无法读取文件” 巧合的是,我注意到,如果我在Excel中打开同一个文件,然后再次保存,商店就会接受它 直接生成的文件与Excel中打开和保存的文件有所不同 这是我的代码: @Override public void writePurchaseList(String path, List<Purcha

我正在编写一个应用程序,它可以读取多个.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();
    }
@覆盖
public void writePurchaseList(字符串路径,列表){
工作簿=新的HSSF工作簿();
Sheet studentsSheet=workbook.createSheet(“BOM”);
最终字符串[]头=新字符串[]{“数量”、“说明”、“订单号”};
int rowIndex=0;
int cellIndex=0;
Row Row=studentsSheet.createRow(rowIndex++);
row.createCell(cellIndex++).setCellValue(头[0]);
row.createCell(cellIndex++).setCellValue(头[1]);
row.createCell(cellIndex++).setCellValue(头[2]);
用于(采购项目:列表){
细胞指数=0;
row=studentsSheet.createRow(rowIndex++);
row.createCell(cellIndex++).setCellValue(item.getItemQuantity());
row.createCell(cellIndex++).setCellValue(item.getDescription());
row.createCell(cellIndex++).setCellValue(item.getOrderNumber());
}
试一试{
FileOutputStream fos=新的FileOutputStream(路径+“.xls”);
练习册。写作(fos);
fos.close();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
有人知道我做错了什么吗


//lg

我记得多年前Apache POI工作簿也存在类似问题。我认为这可能与将空值写入单元格时工作簿缺少单元格策略有关。您可以尝试使用以下设置工作簿缺少单元格策略:

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

如果您在Excel中打开文件并执行另存为操作,它的默认格式是什么?如果您尝试使用Apache POI 3.15 beta 1(或更新版本)读取文件,是否有更有用的文件类型异常?它默认为*.xls,我使用的是3.14。是否有任何理由认为3.15可以解决此问题???如果给它提供不受支持类型的文件,3.15会有更多有用的错误消息。我正在尝试3.15 beta1。编写文件时的结果相同。然后,我添加了一个小片段以打开刚刚编写的同一文件。否显示了错误。我对Apache POI不太熟悉,有办法打开日志记录吗?尝试了这个。对我没有帮助。要设置其他默认值或策略吗?