POI XSSFWorkbook克隆/复制/复制

时间:2014-08-15 08:51:43

标签: java excel apache-poi

我想使用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"的新副本。对象并将其保存在另一个变量中。

1 个答案:

答案 0 :(得分:0)

我进行了类似的练习,我的解决方案是使用WorkbookFactory类的Create方法,并将源文件中的InputStream对象传递给它。是下一个:

InputStream inputStream = new FileInputStream (origin_file)
XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create (inputStream)
XSSFSheet sheet = wb.getSheet (sheet)
...
FileOutputStream file = new FileOutputStream ("new_file.xlsx")
wb.write (file)
file.close ()