首页 文章

如何从大型Excel文件中复制整张表而不使用Apache POI解析它们?

提问于
浏览
2

我是新官方用户,我总是在这里找到答案,但现在我必须要问 .

我正在使用最后一个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 回答

  • 2

    您必须阅读该文件 .

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

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

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

    Andy为迭代器1 .

相关问题