gpt4 book ai didi

java - 使用apache poi将arraylist中的数据插入excel文件中的 block 中

转载 作者:搜寻专家 更新时间:2023-11-01 03:32:33 24 4
gpt4 key购买 nike

我有以下格式的数据数组列表:

ArrayList> 列表结果数据。现在集合包含大约 11k+ 行要插入到 excel 中。当我在 excel 中插入这 11490 行时,6 小时插入记录,这意味着它的性能问题非常糟糕。无论如何,是否有一次将 excel 中的数据插入 1000 行的 block 中(意味着在 sql 中应该有类似 executeBatch() 的东西来插入记录)。一行也包含 4-5 列。

以下是我一直在使用的代码:

public boolean setArrayListData(String sheetName, ArrayList<ArrayList<String>> listResultData) {
try {
fis = new FileInputStream(path);
workbook = new XSSFWorkbook(fis);

int index = workbook.getSheetIndex(sheetName);

if (index == -1)
return false;

sheet = workbook.getSheetAt(index);

int colNum = 0;
int rowNum = this.getRowCount(sheetName);
rowNum++;
for (ArrayList<String> al : listResultData) {
for (String s : al) {
sheet.autoSizeColumn(colNum);
row = sheet.getRow(rowNum - 1);
if (row == null)
row = sheet.createRow(rowNum - 1);

cell = row.getCell(colNum);
if (cell == null)
cell = row.createCell(colNum);

// cell style
// CellStyle cs = workbook.createCellStyle();
// cs.setWrapText(true);
// cell.setCellStyle(cs);
cell.setCellValue(s);
//System.out.print("Cell Value :: "+s);
colNum++;
}
rowNum++;
colNum = 0;
//System.out.println("");
}

fileOut = new FileOutputStream(path);
workbook.write(fileOut);
fileOut.close();
workbook.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}

求推荐!!

最佳答案

您可能想尝试 XSSF 的流式扩展 SXSSF 而不是 XSSF。与 xssf 相比,您可以访问文档中的所有行,这可能会导致性能或堆空间问题,sxssf 允许您定义一个滑动窗口并限制对该窗口中行的访问。您可以使用 new SXSSFWorkbook(int windowSize) 在构建工作簿时指定窗口大小。当您随后创建行并且行数超过指定的窗口大小时,具有最低索引的行将被刷新并且不再在内存中。

SXSSF (Streaming Usermodel API) 找到更多信息

示例:

// keep 100 rows in memory, exceeding rows will be flushed to disk
SXSSFWorkbook wb = new SXSSFWorkbook(100);
Sheet sh = wb.createSheet();
for(int rownum = 0; rownum < 1000; rownum++){
//When the row count reaches 101, the row with rownum=0 is flushed to disk and removed from memory,
//when rownum reaches 102 then the row with rownum=1 is flushed, etc.
Row row = sh.createRow(rownum);
for(int cellnum = 0; cellnum < 10; cellnum++){
Cell cell = row.createCell(cellnum);
String address = new CellReference(cell).formatAsString();
cell.setCellValue(address);
}

}

关于java - 使用apache poi将arraylist中的数据插入excel文件中的 block 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45876531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com