当我试图从一个23MB的xlsx文件中读取、格式化和写入一行时,我面临着OutOfMemoryError。我有一个只格式化文件头的要求。
1)
InputStream inp = new FileInputStream(path);
XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create(inp);
2)
InputStream inp = new FileInputStream(path);
File file = new File(path);
Files.copy(inp, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create(file);
3)
OPCPackage pkg = OPCPackage.open(path);
XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create(pkg);
一点成功都没有。
我看过一些使用XSSFReader、SXSSFWorkbook的示例,但它不能解决我的情况,因为我需要覆盖这一行,所以我认为我真的需要一个工作簿。
有人使用Apache POI和大xlsx文件实现了读写操作吗?
PS:如果解决方案是生成另一个文件,我需要原始文件的格式,因为内容已经格式化了。
我将POI版本从“2017年9月”的3.17更新到“2021年1月”的5.0.0。还有公域--从1.4.1压缩到1.20。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.20</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
</dependency>
现在我可以打开文件并进行更改。
问题内容: 我正在尝试编写一个按位读取文件的读取器,但是大文件有问题。我试图读取100 mb的文件,它花了3分钟多的时间,但是仍然有效。 但是,然后我尝试使用500 mb的文件,但它甚至没有启动。由于这一行: 现在,我正在寻找解决方案,但找不到任何解决方案。也许有人解决了它,可以分享一些代码,技巧或想法。 问题答案: 我建议您尝试使用内存映射。 这将使整个文件几乎立即可用(大约10毫秒),并且几乎
我试图用处理docx文件。只是简单地读取然后写入文件(现在)。这是我的简单代码: 问题是输入文件的头文件中有一个小图像。因此,在使用POI处理输入文件并在Microsoft Word中打开输出文件后,我收到损坏的文件错误: 一切工作在OO Writer,但不是在办公室。 问题是:怎么了?apache POI是否不处理头文件中包含图像的文件?你知道解决这个问题的方法吗? 我需要使用,我不考虑其他工具
我有点迷失了 我试过3.17、4.0.0和5.0.0版。 或 我无法获得没有弃用或类型错误的代码:-( 我将Eclipe与Maven和Java11一起使用。在版本发布之后,我做了“更新项目”来更新Maven。
我有一个巨大的excel文件,其中包含大量列,如下所示:- 当我打印excel中的所有值时,我的代码生成的输出是:- 所以,如果我们看看上面的输出,我们可以注意到我留下空白值的单元格没有被POI库拾取。有没有一种方法可以让这些值为空?还是一种识别所呈现的值跳过空白单元格的方法? 请注意:我使用的不是usermodel(org.apache.poi.ss.usermodel),而是一个事件API来处
问题内容: 错误是Throwable的子类,它指示严重的问题,即合理的应用程序不应尝试捕获 但作为的子类,我可以捕获这种类型。 我了解为什么捕获这种异常不是一个好主意。据我了解,如果我们决定捕获它,捕获处理程序不应自行分配任何内存。否则会再次抛出。 所以,我的问题是: 捕捞可能是个好主意吗? 如果我们决定进行,如何确保处理程序本身不会分配任何内存(任何工具或最佳实践)? 问题答案: 我同意和不同意
uploadActivity.java:-