Java Apache POI正在创建损坏的XLSX文件

Java Apache POI正在创建损坏的XLSX文件,java,excel,apache-poi,Java,Excel,Apache Poi,我正在尝试以XLSX格式创建一个简单的Excel文件。 我可以创建旧的XLS文件,但当我尝试创建其他格式时,文件总是损坏的 我正在使用ApachePOI4.1.1 这是我的简单代码: Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("new sheet"); Row row = sheet.createRow(0); Cell cell = row.createCell(

我正在尝试以XLSX格式创建一个简单的Excel文件。 我可以创建旧的XLS文件,但当我尝试创建其他格式时,文件总是损坏的

我正在使用ApachePOI4.1.1

这是我的简单代码:

Workbook wb = new XSSFWorkbook();
    
Sheet sheet = wb.createSheet("new sheet");
        
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Hellooooo");
        
FileOutputStream fo = new FileOutputStream("C:/Users/Public/invoice_file/Test.xlsx");
        
try {
            
    wb.write(fo);
    fo.flush();
    fo.close(); 
    wb.close();
            
}catch (Exception e) {
    e.printStackTrace();
}
这是错误消息:

使用

org.apache.poi.ss.usermodel.WorkbookFactory

//Parameter indicates whether you want to create an XSSF formatted file or not
WorkbookFactory.create(true);  //true creates XSSF formatted file
将返回一个

org.apache.poi.ss.usermodel.Workbook
然后,您可以使用

Workbook.write(OutputStream)
解决方案:

try (Workbook wb = WorkbookFactory.create(true)) {
    Sheet sheet = wb.createSheet("new sheet");
    Row row = sheet.createRow(0);
    Cell cell = row.createCell(0);
    cell.setCellValue("Hellooooo");
    try (FileOutputStream fos = new FileOutputStream("D:/Test.xlsx")) {
        wb.write(fos);
    }
}

将文件扩展名更改为
.xlsx
不会将文件转换为xlsx类型。这基本上在我的机器上可以工作,但我将
文件输出流的声明移动到
try
的范围内(可能是原因),并使用了不同的路径表示法(无可否认,这不太可能导致文件损坏)。您可以尝试将变量声明为XSSF工作簿、XSSFSheet、XSSFRow等吗?@JLazar0是的,我可以。但这不能解决我的问题。@deHaar您使用的poi版本号是什么?我尝试了您的解决方案,但总是出现相同的错误…请您将确切的错误放在这里?还是与您之前在问题中发布的相同?我尝试了m在上述解决方案中,文件打开得很好。同样的问题。这很奇怪。我可以很好地打开它。您使用的是哪个JDK版本?我不认为这会有影响,但我使用的是JDK 14。我使用的是Java 1.8。