java - 将大文本文件数据写入excel

标签 java apache-poi aspose

我正在阅读一个用一些定界符分隔的文本文件。

我的文本文件内容示例

Avc def efg jksjd
1 2 3 5
3 4 6 0

一行一行地保存在内存中,使用以行号作为整数类型键的hashmap 每行文本文件作为列表对象

考虑一下,我的 map 会像这样存储信息

整数列表

1 [Avc def efg jksjd]

我正在使用 Apache POI 写入 excel。 使用 Apache POI 写入 excel 时,我遵循这种方法,这是我的代码片段

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Sample sheet");
Map<Integer, List<Object>> excelDataHolder = new LinkedHashMap<Integer, List<Object>>();
int rownum = 0;
for (Integer key : keyset) {
            Row row = sheet.createRow(rownum++);
            List<Object> objList = excelHolder.get(key);//excelHolder is my map
            int cellnum = 0;
            for (Object obj : objList) {
                Cell cell = row.createCell(cellnum++);
                    cell.setCellValue((Date) obj);
            }
}

如果要写入 excel 的行数/记录数较少,则此方法效果很好。想象一下,如果记录的数量为十亿,或者文本文件的行数假设为 100 000。我认为,我的方法失败了,因为 createRow 和 createCell 在堆中创建超过 100 000 个对象。 无论 java 到 excel api,我认为写入它(excel)是基于相同的方法,即,如上所示的集合迭代。我也用aspose做了一些例子,结果我猜aspose也有同样的问题。

  • createRow 和 createCell 是否在每次调用时都创建新对象?
  • 如果是,还有什么选择?我将如何编写大数据以获得更好的性能?

最佳答案

最新版本的 apache-poi 有 sxssf .从网站无耻复制

SXSSF (package: org.apache.poi.xssf.streaming) is an API-compatible streaming extension of XSSF to be used when very large spreadsheets have to be produced, and heap space is limited. SXSSF achieves its low memory footprint by limiting access to the rows that are within a sliding window, while XSSF gives access to all rows in the document. Older rows that are no longer in the window become inaccessible, as they are written to the disk.

我用它创建了包含 150 万行的电子表格。

关于java - 将大文本文件数据写入excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16538525/

相关文章:

java - 阿斯普斯。对 Excel 文档中的单元格区域应用水平对齐

java - GridView 加载大图片资源慢

java - 如何从 Kafka 访问记录中的文件路径并从中创建数据集?

java - Java Swing Socket 中的数据丢失

主授权之外的 java.policy 设置不适用于 Apache POI jar

java - 无法将数据追加到现有 Excel 中

java - 通过Java套接字的HTTPS GET/HTTP/1.1请求

java - apache poi 查找工作表中的行数

c# - 如何以编程方式在 C# 的 Excel 单元格中插入新行?

java - Aspose - 将 Excel 转换为 PDF 很慢