EasyExcel导出表格

您所在的位置:网站首页 美国黑种人的祖先是谁啊 EasyExcel导出表格

EasyExcel导出表格

2024-06-14 03:55| 来源: 网络整理| 查看: 265

EasyExcel导出表格——下拉筛选 单元格添加下拉筛选 确保输入内容规范和准确减少数据查询,提高用户使用感根据用户权限,下拉筛选项控制 Controller层 /** * 模板下载 * @param response */ @GetMapping(value = "/download") public void download(HttpServletResponse response) { // 导出模板名称 String fileName = "负责人批量修改模板.xlsx"; ClassPathResource classPathResource = new ClassPathResource("template/payment_permission.xlsx"); try (InputStream inputStream = classPathResource.getInputStream(); OutputStream out = response.getOutputStream();) { response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); // URLEncoder.encode防止中文乱码 response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ";filename*=UTF-8" + URLEncoder.encode(fileName, "UTF-8")); // 表格填充数据 List excelList = permissionSettingService.listPermissionExcel(); ExcelWriterBuilder writerBuilder = EasyExcel.write(out).withTemplate(inputStream); // PermissionExcelWriteHandler处理下拉的handler writerBuilder.sheet(0).registerWriteHandler(new PermissionExcelWriteHandler()).doFill(excelList); } catch (IOException e) { log.error(e.getMessage(), e); response.setStatus(500); } } 处理字典项的Handler(下拉选项不超过50个) public class PermissionExcelWriteHandler implements SheetWriteHandler { @Override public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { } @Override public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { DataValidationHelper helper = writeSheetHolder.getSheet().getDataValidationHelper(); // 设置下拉单元格的首行、末行、首列、末列 CellRangeAddressList accountTypeCellRangeAddressList = new CellRangeAddressList(1, 2000, 2, 2); // AccountTypeEnum.dropIndex() 等于 String[] array = new String[]{"账户1", "账户2"}; DataValidationConstraint accountTypeConstraint = helper.createExplicitListConstraint(AccountTypeEnum.dropIndex()); DataValidation accountTypeDataValidation = helper.createValidation(accountTypeConstraint, accountTypeCellRangeAddressList); writeSheetHolder.getSheet().addValidationData(accountTypeDataValidation); } }

当下拉选项值超过50个时,使用上述方式handler处理,导出的表格中下拉选项不显示,这时候需要将下拉选的内容存在另一个sheet页中。

处理字典项的Handler(下拉选项超过50个)

阿里云参考文档

public class SocialBillExtendExcelWriteHandler implements SheetWriteHandler { /** * key 下拉选项需要填充的列序号,value存放对应的下拉选项内容 */ private Map selectMap; private char[] alphabet = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; public SocialBillExtendExcelWriteHandler(Map selectMap) { this.selectMap = selectMap; } @Override public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { } @Override public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { if (CollUtil.isEmpty(selectMap)) { return; } // 需要设置下拉框的sheet页 Sheet curSheet = writeSheetHolder.getSheet(); DataValidationHelper helper = curSheet.getDataValidationHelper(); String dictSheetName = "数据字典"; Workbook workbook = writeWorkbookHolder.getWorkbook(); // 创建数据字典的sheet页 Sheet dictSheet = workbook.createSheet(dictSheetName); // 提升用户体验,隐藏数据字典的sheet页 workbook.setSheetHidden(workbook.getSheetIndex(dictSheet), true); for (Map.Entry entry : selectMap.entrySet()) { // 设置下拉单元格的首行、末行、首列、末列 CellRangeAddressList rangeAddressList = new CellRangeAddressList(2, 100, entry.getKey(), entry.getKey()); int rowLen = entry.getValue().size(); // 设置字典sheet页的值 每一列一个字典项 Iterator iterator = entry.getValue().iterator(); int rowIndex = 0; while (iterator.hasNext()) { Row row = dictSheet.getRow(rowIndex); if (row == null) { row = dictSheet.createRow(rowIndex); } row.createCell(entry.getKey()).setCellValue(iterator.next()); rowIndex++; } String excelColumn = getExcelColumn(entry.getKey()); // 下拉框数据来源 eg:字典sheet!$B1:$B2 String refers = dictSheetName + "!$" + excelColumn + "$1:$" + excelColumn + "$" + rowLen; // 创建可被其他单元格引用的名称 Name name = workbook.createName(); // 设置名称的名字 name.setNameName("dict" + entry.getKey()); // 设置公式 name.setRefersToFormula(refers); // 设置引用约束 DataValidationConstraint constraint = helper.createFormulaListConstraint("dict" + entry.getKey()); // 设置约束 DataValidation validation = helper.createValidation(constraint, rangeAddressList); if (validation instanceof HSSFDataValidation) { validation.setSuppressDropDownArrow(false); } else { validation.setSuppressDropDownArrow(true); validation.setShowErrorBox(true); } // 阻止输入非下拉框的值 validation.setErrorStyle(DataValidation.ErrorStyle.STOP); validation.createErrorBox("提示", "此值与单元格定义格式不一致!"); // 添加下拉框约束 writeSheetHolder.getSheet().addValidationData(validation); } } /** * 将数字列转化成为字母列 * @param num */ private String getExcelColumn(int num) { String column = ""; int len = alphabet.length - 1; int first = num / len; int second = num % len; if (num


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3