我是新官方用户,我总是在这里找到答案,但现在我必须要问 .
我正在使用最后一个apache-poi 3.8版本(从2012/03/26开始),我必须操作一个包含多个工作表的文件,其中只有一个包含大量数据(超过1000列和10 000行) .
我只需要在大表上有更多的列 . 因此,使用当前存在的工具,我应该使用SAX来读取它,并使用SXSSF来重写它 .
Excel文件已在每张工作表中预先格式化了不同的样式和图像,因此能够在没有大工作表的情况下制作文件的副本将会很有帮助 .
我的问题是:如何在不解析的情况下使用SAX(来自输入流)制作工作表的副本?我尝试在here中执行,但 XSSFWorkbook
中的字段 sheets
将可见性设置为私有 .
如果它是POI开发人员的未来计划,那么很棒的东西就是 SXSSFWriter.SheetIterator
.
谢谢阅读,
亚瑟
**** Update
该文件太大,无法将其作为常见的XSSFWorkbook(OutOfMemoryException)打开 . 是否可以从InputStream创建和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;
}
非常感谢你的回答 .
2 回答
您必须阅读该文件 .
关于第二个问题,请参阅public java.util.Iterator<XSSFSheet> XSSFWorkbook.iterator()
我开始意识到POI和复制操作的经验,就性能而言并不重要,为了复制一个或多个工作表,加载整个工作簿更安全,更容易,删除不必要的工作表,然后将结果保存到另一个文件 .
Andy为迭代器1 .