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版本...