原因:
POI操作Excel中,导出的数据不是很大时,则不会有问题,而数据很多或者比较多时,
就会报以下的错误,是由于cell styles太多create造成
解决方法:
一般可以把cellstyle设置放到循环外面或者将setCellStyle注释掉
private static void xmlToExcel(FileOutputStream fos, OutputStream os, Document doc) {
try {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("sheet1");
sheet.setColumnWidth(0, 4000);
sheet.setColumnWidth(1, 3500);
List<Element> columns = doc.selectNodes("/data/head/colum");
Map<String, SqlColumnType> headMap = new HashMap();
int rownum = 0;
int cellnum = 0;
HSSFRow trows = sheet.createRow(rownum);
rownum = rownum + 1;
trows.setHeight((short)800);
HSSFCell title = trows.createCell(0);
trows = sheet.createRow(rownum);
++rownum;
trows.setHeight((short)500);
for(Iterator var11 = columns.iterator(); var11.hasNext(); ++cellnum) {
Element column = (Element)var11.next();
SqlColumnType sct = new SqlColumnType(column.attributeValue("name"));
String type = column.attributeValue("typecode");
if (!"".equals(type)) {
sct.setColumnType(Integer.valueOf(type));
}
sct.setColumnTypeName(column.attributeValue("type"));
sct.setLocalText(column.getText());
sct.setSign(cellnum + "");
headMap.put(sct.getColumnName(), sct);
HSSFCell cell = trows.createCell(cellnum);
//cell.setCellStyle(JxStyle.getHSSHeadStyle(wb));
cell.setCellValue(sct.getLocalText());
switch(sct.getColumnType()) {
case 91:
case 93:
sheet.setColumnWidth(cellnum, 5000);
break;
default:
sheet.setColumnWidth(cellnum, 4000);
}
}
List<Element> data = doc.selectNodes("/data/rows");
Iterator var27 = data.iterator();
label70:
while(var27.hasNext()) {
Element rows = (Element)var27.next();
HSSFRow drows = sheet.createRow(rownum);
++rownum;
drows.setHeight((short)500);
List<Element> cells = rows.selectNodes("cell");
Iterator var16 = cells.iterator();
while(true) {
SqlColumnType sct;
String text;
do {
do {
if (!var16.hasNext()) {
continue label70;
}
Element cellel = (Element)var16.next();
String name = cellel.attributeValue("name");
sct = (SqlColumnType)headMap.get(name);
text = cellel.getText();
} while("".equals(text));
} while(sct == null);
HSSFCell cell = drows.createCell(Integer.valueOf(sct.getSign()));
//cell.setCellStyle(JxStyle.getHSSDataStyle(wb));
try {
if (sct.getColumnType() != 2 && sct.getColumnType() != 4) {
if (sct.getColumnType() != 91 && sct.getColumnType() != 93) {
cell.setCellValue(text);
} else {
cell.setCellValue(DateUtil.toDate(text));
//cell.setCellStyle(JxStyle.getHSSDateStyle(wb));
}
} else {
cell.setCellValue(Double.valueOf(text));
}
} catch (Exception var23) {
cell.setCellValue(text + "");
}
}
}
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, headMap.size() - 1));
title.setCellValue(doc.getRootElement().attributeValue("title"));
//title.setCellStyle(JxStyle.getHSSTitileStyle(wb));
if (fos != null) {
os = fos;
}
wb.write((OutputStream)os);
((OutputStream)os).close();
} catch (Exception var24) {
log.error("ExcelExp xmlToExcel error:" + var24.getMessage(), var24);
}
}