The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook

原因:

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);
		}

	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值