繁体   English   中英

如何在不使用Apache POI解析的情况下从大型excel文件复制整个工作表?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM