在用POI导出Excel表格时,报如下错误:
Caused by: java.lang.IllegalStateException: The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook
原因:style创建次数太多。
改进方法:现在循环外,创建style,然后在循环中再用样式。
修改前代码,如下所示,当数据不是很大时,系统不会提示出错,但当数据很大时,就会报错。
public class CellValue {
public static HSSFWorkbook setValue (ExcelEntity g) {
List<LinkedHashMap<String,Object>> list = g.getList();
HSSFWorkbook workbook = g.getWb();
/*HSSFSheet sheet = workbook.getSheet(g.getStr());*/
HSSFSheet sheet = workbook.getSheetAt(0);
for(int i=0;i<list.size();i++) {
LinkedHashMap<String,Object> map3 = list.get(i);
HSSFRow contentRow = sheet.createRow(i+4);
int j=0;
for (Iterator<String> it = map3.keySet().iterator();it.hasNext();) {
Object key = it.next();
HSSFCell NameContent = contentRow.createCell(j);
System.out.println(map3.get(key));
NameContent.setCellValue((String)map3.get(key));
NameContent.setCellStyle(ExcelStyle.getContentStyle(workbook));
j++;
}
}
return workbook;
}
}
修改后代码:
HSSFCellStyle contentStyle = ExcelStyle.getContentStyle(workbook);
for(int i=0;i<list.size();i++) {
LinkedHashMap<String,Object> map3 = list.get(i);
HSSFRow contentRow = sheet.createRow(i+4);
int j=0;
for (Iterator<String> it = map3.keySet().iterator();it.hasNext();) {
Object key = it.next();
HSSFCell NameContent = contentRow.createCell(j);
System.out.println(map3.get(key));
NameContent.setCellValue((String)map3.get(key));
NameContent.setCellStyle(contentStyle);
j++;
}
}