[英]How to copy entire sheets from large excel files without parsing them using Apache POI?
我是正式用户,所以我总是在这里找到答案,但是现在我不得不问。
我正在使用最新的apache-poi 3.8版本(从2012/03/26开始),我必须处理具有多个工作表的单个文件,其中只有一个工作表包含大量数据(超过1000列和10000行)。
我只需要在大型表上添加更多列即可。 因此,使用现有的工具,我应该使用SAX来读取它,并使用SXSSF来重写它。
Excel文件已经预先格式化为每张纸具有不同的样式和图像,因此能够在不使用大纸的情况下复制文件将很有帮助。
我有一个问题:如何在不解析的情况下使用SAX(从中的输入流)复制工作表? 我在这里尝试这样做,但是XSSFWorkbook
的字段工作sheets
的可见性设置为private。
很棒的事情是,如果将来在POI开发人员的计划中拥有SXSSFWriter.SheetIterator
类的东西。
谢谢阅读,
亚瑟
**更新* *
该文件太大,无法将其作为通用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;
}
非常感谢你的回答。
您将必须阅读文件。
关于第二个问题,请参见public java.util.Iterator <XSSFSheet> XSSFWorkbook.iterator()
Allows foreach loops:
XSSFWorkbook wb = new XSSFWorkbook(package);
for(XSSFSheet sheet : wb){
}
通过对POI和复制操作的经验,我逐渐意识到,就性能而言,关键不是要复制一张或多张工作表,更安全,更轻松地加载整个工作簿,删除不必要的工作表,然后将结果保存到另一个文件。
并为Andy的迭代器+1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.