1. 优客号首页
  2. 用户投稿

java – Web开发 – POI导出带有下拉框的Excel和解决下拉中数组过多而产生的异常

java – Web开发 – POI导出带有下拉框的Excel和解决下拉中数组过多而产生的异常问题描述 1、如果Excel

问题描述

1、如果Excel下拉的数组较少(大概为0~20个),可以用如下方式导出:

/** * Excel API */ @SuppressWarnings(“resource”) HSSFWorkbook book = new HSSFWorkbook(); HSSFSheet sheet = book.createSheet(“xxxx”); /** * 初始化参数 */ Map<String, String> map = new HashMap<String, String>(); // 查询时用的map List<Object> list = null; String[] strs = null; // 用于下拉的数组 int startRow = 1; // 下拉的开始行 int endRow = 100; // 下拉的结束行 CellRangeAddressList regions = null; DVConstraint constraint = null; CellRangeAddressList addressList = null; HSSFDataValidation validation = null; // 数据验证 map.put(“namespace”, “xxxxxxxxxx.xxxxxxxxxx”); // 查询数据 list = commonQueryService.queryList(map); strs = StringUtil.mapListToStrs(list); // list转换为字符串数组 cellNum = SpuEnu.CATEGORY_1.getNumber(); // 下拉的列 regions = new CellRangeAddressList(startRow, endRow, cellNum, cellNum); // 开始行、结束行、开始列、结束列的下拉区域均被下拉替代 constraint = DVConstraint.createExplicitListConstraint(strs); validation = new HSSFDataValidation(regions, constraint); // 绑定下拉框和作用区域 sheet.addValidationData(validation);

2、问题是如果下拉的数组过多,POI会出现如下异常信息:

String literals in formulas can’t be bigger than 255 characters ASCII

这个问题的解决办法网上不好查到,所以我将解决办法贴在下面

问题解答

回答1:

下面是解决办法:

/** * Excel API */ @SuppressWarnings(“resource”) HSSFWorkbook book = new HSSFWorkbook(); HSSFSheet sheet = book.createSheet(“spu导入模板”); /** * 初始化参数 */ Map<String, String> map = new HashMap<String, String>(); // 查询时用的map List<Object> list = null; String[] strs = null; // 用于下拉的数组 String hiddenSheet = null; int cellNum = 0; int startRow = 1; // 开始行 int endRow = 100; // 结束行 DVConstraint constraint = null; CellRangeAddressList addressList = null; HSSFDataValidation validation = null; // 数据验证 map.put(“namespace”, “xxxxxxx.xxxxx”); // 查询 list = commonQueryService.queryList(map); strs = StringUtil.mapListToStrs(list); hiddenSheet = “category1Hidden”; cellNum = SpuEnu.CATEGORY_1.getNumber(); HSSFSheet category1Hidden = book.createSheet(hiddenSheet); // 创建隐藏域 for (int i = 0, length = strs.length; i < length; i++) { // 循环赋值(为了防止下拉框的行数与隐藏域的行数相对应来获取>=选中行数的数组,将隐藏域加到结束行之后) category1Hidden.createRow(endRow + i).createCell(cellNum).setCellValue(strs[i]); } Name category1Name = book.createName(); category1Name.setNameName(hiddenSheet); category1Name.setRefersToFormula(hiddenSheet + “!A1:A” + (strs.length + endRow)); // A1:A代表隐藏域创建第?列createCell(?)时。以A1列开始A行数据获取下拉数组 constraint = DVConstraint.createFormulaListConstraint(hiddenSheet); addressList = new CellRangeAddressList(startRow, endRow, cellNum, cellNum); validation = new HSSFDataValidation(addressList, constraint); book.setSheetHidden(1, true); // 1隐藏、0显示 sheet.addValidationData(validation);

请注意上面的这俩个地方:

java - Web开发 - POI导出带有下拉框的Excel和解决下拉中数组过多而产生的异常

java - Web开发 - POI导出带有下拉框的Excel和解决下拉中数组过多而产生的异常java - Web开发 - POI导出带有下拉框的Excel和解决下拉中数组过多而产生的异常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表优客号立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://www.youkehao.org.cn/article/119452.html

如若内容造成侵权/违法违规/事实不符,请联系优客号进行投诉反馈,一经查实,立即删除!

发表评论

登录后才能评论