如何从大的Excel文件复制整个工作表,而无需使用Apache POIparsing它们?

我是一个新的官方用户,我总是在这里find我的答案,但现在我必须问。

我正在使用最后一个apache-poi 3.8版本(从2012/03/26开始),我必须使用多个工作表来处理单个文件,其中只有一个包含大量数据(超过1000列和10000行)。

我只需要有更多的专栏到大单。 因此,对于现有的工具,我应该使用SAX来读取它,SXSSF来重写它。

Excel文件已经在每张表格中以不同的样式和图像进行了格式化,因此能够在不使用大表格的情况下制作文件的副本。

有我的问题:我怎样才能使用SAX(从inputstream中)没有parsing它的工作表副本? 我试图像这样做,但XSSFWorkbook的字段sheets的可见性设置为私有。

真棒的事情将是有像SXSSFWriter.SheetIterator东西,如果它在未来的POI开发者计划。

谢谢阅读,

亚瑟

**更新* *

该文件太大,无法将其作为常见的XSSFWorkbook(OutOfMemoryException)打开。 有可能从InputStream创build和XSSFSheet? 如下所示:

  XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) xssfReader .getSheetsData(); int index = 0; while (iter.hasNext()) { InputStream stream = iter.next(); String sheetName = iter.getSheetName(); if (!sheetName.equalsIgnoreCase("BigSheetThatIDontWant")) { Sheet newSheet = new XSSFSheet(stream); stream.close(); } ++index; } 

非常感谢你的回答。

你将不得不阅读文件。

关于第二个问题,请参阅public java.util.Iterator <XSSFSheet> XSSFWorkbook.iterator()

 Allows foreach loops: XSSFWorkbook wb = new XSSFWorkbook(package); for(XSSFSheet sheet : wb){ } 

我意识到在我的POI和复制操作的经验中,就性能而言并不重要的是,为了复制一个或多个表单,加载整个工作簿更加安全和容易,删除不需要的表单并将结果保存在另一个文件。

和迭代器的安迪+1。