我正在尝试将excel文件转换为XSSFWorkbook,我有大约7000行和大约145列。将excel文件转换为第2行的XSSFWorkbook大约需要15分钟,代码如下:-
InputStream fs = new FileInputStream(filename); // (1)
XSSFWorkbook wb = new XSSFWorkbook(fs); // (2)
XSSFSheet sheet = wb.getSheetAt(0);
我不想向XFFSWorkbook添加7000行,只想在第2行转换时向XFFSWorkbook添加30行?
如果没有,如何减少将excel转换为XSSFWorkbook所需的时间?
要稍微提高超大文件的性能,只需将文件直接传递到工作簿而不是流。
从这个链接:
打开工作簿时,无论是. xls HSSFWorkbook还是. xlsx XSSFWorkbook,都可以从文件或InputStream加载工作簿。使用File对象可以降低内存消耗,而InputStream需要更多内存,因为它必须缓冲整个文件。
XSSFWorkbook wb = new
XSSFWorkbook(new File (filename)); // (2)
XSSFSheet sheet = wb.getSheetAt(0);
此外,使用WorkBookFactory更干净,因为它抽象了您正在使用的excel文件的类型:
Workbook workbook = WorkbookFactory.create(new File(filename));
A<代码>*。xlsx文件是一个包含Excel数据的ZIP存档文件,其目录结构具有不同的XML文件。
例如,有
因此,如果您想读取*. xlsx
ZIP
存档,您需要解压ZIP
存档,然后至少解析上面提到的四个XML
文件以获取XSSFWorkbook
的数据。这就是apache poi
在XSSFWorkbook wb=new XSSFWorkbook(fileinputstream);
时所做的。
因此,如果您确实需要一个XSSFWorkbook,那么这个过程是无法绕过的。如果您没有怀疑apache poi编程了显式延迟例程,那么就不可能减少此过程的时间量。
只读取比存储到工作表中的行少的行的方法可能会节省时间。但是,您的结果将是一个XSSFWorkbook,它包含所有样式和所有字符串内容,但只包含一些与这些样式和字符串数据相关的工作表数据。因此,它将导致XSSFWorkbook部分损坏。这就是为什么没有人真正考虑过这种方法。
只有当需求仅从/xl/workSheetN. xml
之一读取普通的未格式化数据而不创建XSSFWorkbook
时,您才需要解压ZIP
存档,然后仅解析所需的/xl/workSheetN. xml
和/xl/share dStrings.xml
以获取单元格的字符串内容。这将比上述整个过程的时间更短。
问题内容: 我正在使用以下代码: xlsx文件本身具有25,000行,每行包含500列的内容。在调试过程中,我看到创建XSSFWorkbook的第三行需要很长时间(1小时!)来完成此语句。 有没有更好的方法来访问原始xlsx文件的值? 问题答案: 首先,当您有文件时,不要从InputStream加载XSSFWorkbook!使用InputStream需要将所有内容缓冲到内存中,这会占用空间并占用时
如果需要更多的细节,请让我知道。
我使用javamail通过IMAP协议从exchage帐户读取邮件。这些邮件是纯格式的,内容是XML。 几乎所有这些邮件的大小都很短(通常小于100Kb)。然而,有时我不得不处理大型邮件(大约10Mb-15Mb)。例如,昨天我收到一封13Mb大小的电子邮件。仅仅读它就花了50多分钟。这正常吗?有没有办法提高它的性能?代码是: 花费如此长时间的方法是。我做错了什么?有什么提示吗? 非常感谢,我的英语
问题内容: 如何转换 至 在Apache POI中? 环境 : JSE1.6 JBossAS 4.3.2 兴趣点3.7 问题答案: 此代码已改编自我在coderanch论坛上找到的内容
此代码用于生成excel报告。有15列,如果记录数在1000左右,生成excel表需要近10-15分钟。上面的代码有什么问题吗?如何提高性能(Excel报告生成时间减少)?
我想使用@RunFor(Parameterized.class)和 实际的测试数据应由业务人员通过Excel创建。 是否有一种简单/通用的方法可以将Apache POI XSSFSheet获取到指定的字符串数组集合? 如果是:有人能提供一个例子吗? 我发现了这个问题:使用Apache POI在TestNG中进行Datadriven测试---但我希望是一种3线测试;-)