try {
        File file = new File("file4.xls");
        if (!file.exists()) file.createNewFile();
        FileInputStream fis = new FileInputStream(file);
        POIFSFileSystem fileSystem = new POIFSFileSystem(fis);
        //   FileInputStream fis = new FileInputStream(file);
        HSSFWorkbook workbook = new HSSFWorkbook(fileSystem);
        //Sheet sheet = workbook.createSheet("sheet0");
        Sheet sheet = workbook.getSheet("sheet1");
        sheet.createRow(0).createCell(0).setCellValue("HelloWorld");
        Cell cell = sheet.createRow(1).createCell(0);
        cell.setCellValue("Value_1_1");
        fis.close();
        FileOutputStream fos = new FileOutputStream(file);
        workbook.write(fos);
        workbook.close();
    } catch (IOException e) {
        e.printStackTrace();
    }


我正在尝试使用Java创建简单的Excel文件。我遇到上述错误。

最佳答案

您的问题是此行:

    if (!file.exists()) file.createNewFile();


这将创建一个全新的0字节文件,该文件不是有效的Excel文件。这就是POI反对的原因。

另外,您正在使用旧版本的Apache POI。如果您很傻,要求他们读取零字节文件,则较新的文件会提供更有用的例外

考虑到advice on Files vs InputStreams,但要注意,您正在执行的是就地写操作,但在打开的文件上尚不完全支持该写操作,请将代码更改为:

Workbook workbook = null;
File file = new File("file4.xls");
if (!file.exists()) {
   if (file.toString().endsWith(".xlsx")) {
      workbook = new XSSFWorkbook();
   } else {
      workbook = new HSSFWorkbook();
   }
} else {
   workbook = WorkbookFactory.create(new FileInputStream(file));
}


这对于.xls.xlsx文件都适用,并且避免了错误

虽然您也确实应该升级您的Apache POI版本...

09-30 17:50
查看更多