Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从大型excel文件复制整个工作表,而不使用Apache POI对其进行解析?_Java_Excel_Apache Poi_Sax_Saxparser - Fatal编程技术网

Java 如何从大型excel文件复制整个工作表,而不使用Apache POI对其进行解析?

Java 如何从大型excel文件复制整个工作表,而不使用Apache POI对其进行解析?,java,excel,apache-poi,sax,saxparser,Java,Excel,Apache Poi,Sax,Saxparser,我是一个新的官方用户,我总是在这里找到我的答案,但现在我不得不问 我正在使用上一个apache poi 3.8版本(2012/03/26),我必须处理一个包含多个工作表的文件,其中只有一个工作表包含大量数据(超过1000列和10000行) 我只需要在大张纸上多写几列就行了。因此,使用现有的工具,我应该使用SAX读取它,使用SXSSF重写它 Excel文件已经在每个工作表中预先设置了不同样式和图像的格式,因此,能够在没有大工作表的情况下复制文件将很有帮助 我的问题是: 如何使用SAX(从中的输入流

我是一个新的官方用户,我总是在这里找到我的答案,但现在我不得不问

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

我只需要在大张纸上多写几列就行了。因此,使用现有的工具,我应该使用SAX读取它,使用SXSSF重写它

Excel文件已经在每个工作表中预先设置了不同样式和图像的格式,因此,能够在没有大工作表的情况下复制文件将很有帮助

我的问题是: 如何使用SAX(从中的输入流)复制工作表而不进行解析? 我试图在中执行类似操作,但
XSSFWorkbook
中的
sheets
字段的可见性设置为private

如果POI开发人员将来计划使用类似于
sxsfwriter.SheetIterator
的工具,那么最棒的就是它

谢谢你的阅读

亚瑟

**更新**

该文件太大,无法作为普通XSSF工作簿打开(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;
    }

非常感谢您的回答。

您必须阅读该文件

关于第二个问题,见


在POI和复制操作的整个过程中,我逐渐意识到,只要性能不重要,为了复制一张或多张工作表,加载整个工作簿、删除不必要的工作表,然后将结果保存到另一个文件中更安全、更容易

Andy为+1表示迭代器。

Andy为+1表示迭代器。但是Andy仍然有0票。天哪,你是对的:)你知道他们怎么说多任务和旧处理器。。。
Allows foreach loops:

 XSSFWorkbook wb = new XSSFWorkbook(package);
 for(XSSFSheet sheet : wb){

 }