我想使用OPCPackage和XSSFWorkbook在POI中打开一个excel文件 . 由于此文件将在不同的线程中使用,我想避免重新打开文件以节省时间(POI在打开xlsx文件时很慢) . 所以我所做的是将工作簿保存在全局变量中,然后线程将只访问此全局变量并重用该对象 .

我遇到的问题是当我尝试重用该对象时,它会影响/修改excel文件的原始数据 .

我试图通过克隆或序列化从全局变量制作工作簿的副本,但我遇到了两个进程的错误 .

有没有办法从现有的XSSFWorkbook对象创建新副本,使用这个新副本不会影响原始文件的数据?

这是打开excel文件的代码:

OPCPackage pkg = OPCPackage.open(new File("c:/sample.xlsx"));
XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create(pkg);

我想创建一个“wb”对象的新副本并将其保存在另一个变量中 .