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