我正在读取一个文本文件,并用一些定界符分隔。
我的文本文件内容示例
AVC DEF EFG JKSJD
1 2 3 5
3 4 6 0
逐行并将其保存在内存中,使用具有行号作为整数类型键的hashmap和
文本文件的每一行都作为List对象
考虑一下,我的 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的行数/记录数较少,则此方法效果很好。想象一下,如果记录的数量是十亿,或者如果文本文件中的行数更多,则假定为10万。
createRow和createCell在堆中创建了超过100000个对象。
无论将Java转换为excel api,我都认为写入excel(excel)是基于相同的方法,即如上所述的collection的迭代。我也用aspose做过一些例子,结果aspose也有我猜到的同样问题。
最佳答案
apache-poi的最新版本为sxssf。从网站无耻复制
我曾用它来创建具有150万行的电子表格。