首页 > 解决方案 > 如何使用同一工作簿读取和写入 Excel 文件 (.xlsx)?

问题描述

是否可以使用相同的工作簿读取和写入 Excel 文件 (.xlsx) ?

我尝试使用相同的工作簿来提高性能。

确实,打开,关闭,打开,关闭,......不是很有效。

所以我将工作簿保存在“全局变量”中。

this.FileInputStream = null
this.Workbook = null

public void before() {
     this.FileInputStream = new FileInputStream (new File('File.xlsx'))
     this.Workbook = new XSSFWorkbook(this.FileInputStream)
}

public void read() {
     XSSFSheet sheet = this.Workbook.getSheet(sheetName) 
     ...
}

public void write() {
     XSSFSheet sheet = this.Workbook.getSheet(sheetName) 
     ...
     FileOutputStream outFile = new FileOutputStream(new File('File.xlsx'))
     this.Workbook.write(outFile)
     outFile.close()
}    

public void after() {
     this.Workbook = null
     this.FileInputStream.close()
     this.FileInputStream = null 
}

错误

org.apache.xmlbeans.impl.values.XmlValueDisconnectedException

在线的

this.Workbook.write(outFile)

你能帮我改进一下吗?

先感谢您,

问候,

标签: javaapache-poi

解决方案


从评论中移出我的答案:

我发现曾经有一个与多次编写有关的错误:bz.apache.org/bugzilla/show_bug.cgi ?id=49940 。它可能已在版本 3.10-FINAL (2014-02-08) 中修复。

如果您使用的是旧版本并且无法获得新版本,那么您最好的选择可能是不要多次写入同一个工作簿。要么在打开文件后立即进行所有更改并写入一次,要么在每次写入后重新打开文件。


推荐阅读