我有下面的代码块包含循环:
Row row = null;
Cell cell = null;
String dataVal = null;
String[] temp = null;
for (int j = 0; j < this.myDataValues.size(); j++) {
row = sheet.createRow(rownum++);
temp = this.finalRowValues.get(j);
for (int i = 0; i < 4; i++) {
cell = row.createCell(i);
dataVal = temp[i];
if (NumberUtils.isNumber(dataVal)) {
double d = Double.valueOf(dataVal);
cell.setCellValue(d);
cell.setCellType(Cell.CELL_TYPE_NUMERIC);
cell.setCellStyle(styles.get("currency"));
} else if (isValidDate(dataVal)) {
cell.setCellValue(dataVal);
cell.setCellType(Cell.CELL_TYPE_NUMERIC);
cell.setCellStyle(styles.get("date"));
} else {
cell.setCellValue(temp[i]);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellStyle(styles.get("data"));
}
sheet.autoSizeColumn(i);
}
}
Run Code Online (Sandbox Code Playgroud)
其中myDataValues是List的String[]与每个String[]含有4个值对象.
我在Rational Application Developer版本8和Apache POI 3.8中运行它.
myDataValues我相信有大约5500个元素,这是一个相当小的价值.
但是,此代码块需要花费一个多小时才能运行.
我觉得这有点不对劲.每个包含4个元素的5500个元素应该运行得非常快,应该是几分钟的问题.可能的原因是什么?有没有办法让这个块运行得更快?
机器的可用内存或任何其他此类问题没有任何问题.一切都按预期工作,我已经验证了.问题仅出在此块中.
你的处理速度非常慢,因为你要求autoSizeColumn每一行.从Javadocs的autoSizeColumn方法:
对于大型工作表,此过程可能相对较慢,因此通常只应在处理结束时每列调用一次.
将调用放置在autoSizeColumn创建行的循环外部,for仅在列上的自己的循环中.这将最大限度地减少对此方法的调用并提高性能.
| 归档时间: |
|
| 查看次数: |
1143 次 |
| 最近记录: |