编辑/编写工作簿而不保存不同的名称

时间:2016-07-14 14:53:06

标签: apache-poi

是否可以保存工作簿并保存而不将编辑过的文件复制到基础文件上?

这是我的代码:

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文件写入另一个文件,为什么会编辑它?

1 个答案:

答案 0 :(得分:2)

截至2016年7月(Apache POI 3.15 beta 2),尚不支持

在POI中,我们称之为就地写入。截至最近,基础文件格式模块(POIFS和OPC)现在都支持这一点。 (他们很长一段时间都没有,这就是为什么POI已经成长起来的原因,就像保存一样)。但是,没有更新任何特定于格式的模块以利用此功能。因此,在UserModel级别打开的所有文档(例如WorkbookHWPFDocument XLSFSlideShow)目前仅支持写入新流

如果您对此感兴趣,则需要注意的错误是#57919#59287

如果这些对您很重要,并且您想要一些编码时间来帮助,请查看contribution guide然后加入the dev list,人们可以给您指点!