【发布时间】:2016-01-22 19:22:28
【问题描述】:
因此,使用 Apache POI 在 Excel 中出现不可读内容错误的话题似乎很常见。但是,我很惊讶我仍然找不到我的问题的例子,特别是因为我正在尝试做的事情似乎非常简单。这让我相信,由于我对一些 java 对象的理解,特别是 File 和 FileInputStream,有些事情可能只是让我头疼。我通过大量的试验和错误发现了如何使它工作,但我的问题是为什么一个工作,为什么另一个不工作,并且很想了解潜在的问题。我认为它也可以帮助其他人理解。这正是我想要做的:
打开现有的 xlsx 文件,向其中添加工作表,然后将其保存为与其原始文件名相同的文件名。本质上,只需修改现有的 xlsx 文件即可添加工作表。
下面是不起作用的代码和起作用的代码,我想知道为什么使用 File 对象不起作用。在这两个示例中,我已经创建了 TravelVouchers.xlsx 带有名为 Voucher_1 的工作表的文件,并且可以正常打开它。
以下代码导致travelVouchersWkBk.write(fileOut); 行上的 NullPointerException:
File travelVouchersFile = new File("./Output/TravelVouchers.xlsx");
Workbook travelVouchersWkBk = WorkbookFactory.create(travelVouchersFile);
travelVouchersWkBk.createSheet("Voucher_2");
FileOutputStream fileOut = new FileOutputStream(travelVouchersFile);
travelVouchersWkBk.write(fileOut);
fileOut.flush();
fileOut.close();
虽然以下代码效果很好:
File travelVouchersFile = new File("./Output/TravelVouchers.xlsx");
FileInputStream fileIn = new FileInputStream(travelVouchersFile);
Workbook travelVouchersWkBk = WorkbookFactory.create(fileIn);
travelVouchersWkBk.createSheet("Voucher_2");
fileIn.close();
FileOutputStream fileOut = new FileOutputStream(travelVouchersFile);
travelVouchersWkBk.write(fileOut);
fileOut.flush();
fileOut.close();
在不起作用的代码中,导致excel中有不可读内容的错误,当我选择修复时,我可以打开它,它只有Voucher_1。因此,显然将 WorkbookFactory.create 与 File 对象一起使用是行不通的,而使用 FileInputStream 则可以,但我想知道我对 File 与 FileInputStream 的哪些方面不了解,因为它与此问题有关。
非常感谢您的澄清,我真的很感激! 保罗
【问题讨论】:
标签: java excel apache-poi