是否可以保存工作簿并保存而不将编辑过的文件复制到基础文件上?
这是我的代码:
File file = new File("base.xlsx");
Workbook workbook = WorkbookFactory.create(file);
Sheet sheet = workbook.getSheet("data");
...
//creating rows and cells, writing stuff
...
//saving
FileOutputStream fos = new FileOutputStream("edited.xlsx");
workbook.write(fos);
workbook.close();
fos.close();
//now both the base.xlsx and edited.xlsx contain all the new and previous data - and are exactly the same size
//using only
workbook.close();
//the workbook file size changes (approximately to the same as edited.xlsx) and the timestamp is current
//BUT the data doesn't get saved
我所知道的另一种可能性是使用InputStream(但后来我的内存不足(10MB .xlsx文件和2GB堆空间))
令人困惑的部分是:如果我将base.xlsx文件写入另一个文件,为什么会编辑它?
答案 0 :(得分:2)
截至2016年7月(Apache POI 3.15 beta 2),尚不支持
在POI中,我们称之为就地写入。截至最近,基础文件格式模块(POIFS和OPC)现在都支持这一点。 (他们很长一段时间都没有,这就是为什么POI已经成长起来的原因,就像保存一样)。但是,没有更新任何特定于格式的模块以利用此功能。因此,在UserModel级别打开的所有文档(例如Workbook
或HWPFDocument
XLSFSlideShow
)目前仅支持写入新流
如果您对此感兴趣,则需要注意的错误是#57919和#59287。
如果这些对您很重要,并且您想要一些编码时间来帮助,请查看contribution guide然后加入the dev list,人们可以给您指点!