java - 如何使用同一工作簿读取和写入 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)
你能帮我改进一下吗?
先感谢您,
问候,
解决方案
从评论中移出我的答案:
我发现曾经有一个与多次编写有关的错误:bz.apache.org/bugzilla/show_bug.cgi ?id=49940 。它可能已在版本 3.10-FINAL (2014-02-08) 中修复。
如果您使用的是旧版本并且无法获得新版本,那么您最好的选择可能是不要多次写入同一个工作簿。要么在打开文件后立即进行所有更改并写入一次,要么在每次写入后重新打开文件。
推荐阅读
- swiftui - 翻译一个变量(在 Text() 中使用)
- php - 在php中比较两个不同的日期
- laravel - Laravel 6:禁用访客的所有路由,除了家庭和登录
- c# - 使用 MvvmLight.Messaging.Messenger 实例化新的 View + ViewModel (Window)
- c# - 有没有办法使用 C# 生成数据库的数据库设计图
- javascript - 我错过了将网络浏览器中录制的长音频发送到 oracle apex 的东西?
- date - prolog - 在日期之间生成日期
- ios - 如何在 iOS 应用上使用 Xamarin UITest 操作呈现为 UIDatePickerContentView 的 DatePicker 控件中的值
- ionic-framework - PhotoViewer 插件仅在 iOS 上显示黑屏或崩溃
- r - 根据R中不同的值和列组合编写不同的.csv文件