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();
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 java 创建简单的 Excel 文件。我收到上述错误。
你的问题是这里的这一行:
if (!file.exists()) file.createNewFile();
Run Code Online (Sandbox Code Playgroud)
这将创建一个全新的 0 字节文件,该文件不是有效的 Excel 文件。这就是 POI 反对的原因。
此外,您使用的是旧版本的 Apache POI。如果您愚蠢地要求他们读取零字节文件,较新的文件会提供更有用的例外
考虑到Files 与 InputStreams 的建议,但请注意您正在进行就地写入,而打开的 File 尚未完全支持该写入,请将代码更改为更像:
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));
}
Run Code Online (Sandbox Code Playgroud)
这适用于.xls和.xlsx文件,并避免您的错误
虽然您确实也应该升级您的 Apache POI 版本......