From a9028e046d2684c4c10c40ffb8362bb5962d6c35 Mon Sep 17 00:00:00 2001 From: hongawen <83944980@qq.com> Date: Wed, 5 Jun 2024 17:38:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/njcn/poi/excel/ExcelUtil.java | 102 ++++++++++++++++++ .../user/impl/UserReportPOServiceImpl.java | 2 +- 2 files changed, 103 insertions(+), 1 deletion(-) diff --git a/pqs-common/common-poi/src/main/java/com/njcn/poi/excel/ExcelUtil.java b/pqs-common/common-poi/src/main/java/com/njcn/poi/excel/ExcelUtil.java index 59d1d2b44..7c91a82dd 100644 --- a/pqs-common/common-poi/src/main/java/com/njcn/poi/excel/ExcelUtil.java +++ b/pqs-common/common-poi/src/main/java/com/njcn/poi/excel/ExcelUtil.java @@ -239,4 +239,106 @@ public class ExcelUtil { sheet.addValidationData(validation); } + + /** + * 指定名称、数据下载报表(带指定标题将*显示比必填信息),带有下拉信息 + * + * @param fileName 文件名 + */ + public static void exportExcelPullDownOne(ExportParams exportParams, String fileName, List pullDowns, Class pojoClass, Collection dataSet) { + HttpServletResponse response = HttpServletUtil.getResponse(); + try (ServletOutputStream outputStream = response.getOutputStream()) { + fileName = URLEncoder.encode(fileName, CharsetUtil.UTF_8); + response.reset(); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + response.setContentType("application/octet-stream;charset=UTF-8"); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, dataSet); + if (CollUtil.isNotEmpty(pullDowns)) { + for (PullDown pullDown : pullDowns) { + ExcelUtil.selectListOne(workbook, pullDown.getFirstCol(), pullDown.getLastCol(), pullDown.getStrings().toArray(new String[]{})); + } + } + Sheet sheetAt = workbook.getSheetAt(0); + //获取列数 + int physicalNumberOfCells = sheetAt.getRow(0).getPhysicalNumberOfCells(); + //没有表格标题,只有表格头 + for (int i = 0; i < 2; i++) { + //获取行 + Row row = sheetAt.getRow(i); + if(Objects.isNull(row)){ + continue; + } + for (int j = 0; j < physicalNumberOfCells; j++) { + //获取单元格对象 + Cell cell = row.getCell(j); + //获取单元格样式对象 + CellStyle cellStyle = workbook.createCellStyle(); + //获取单元格内容对象 + Font font = workbook.createFont(); + font.setFontHeightInPoints((short) 12); + //一定要装入 样式中才会生效 + cellStyle.setFont(font); + //设置居中对齐 + cellStyle.setAlignment(HorizontalAlignment.CENTER); + cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + //设置单元格字体颜色 + cell.setCellStyle(cellStyle); + //获取当前值 + String stringCellValue = cell.getStringCellValue(); + if (stringCellValue.contains("*")) { + // 创建一个富文本 + XSSFRichTextString xssfRichTextString = new XSSFRichTextString(stringCellValue); + int startIndex = stringCellValue.indexOf("*"); + int entIndex = stringCellValue.lastIndexOf("*"); + if (entIndex != 0) { + Font font3 = workbook.createFont(); + font3.setFontHeightInPoints((short) 12); + font3.setColor(Font.COLOR_NORMAL); + xssfRichTextString.applyFont(0, entIndex, font3); + } + //设置带*样式 + Font font1 = workbook.createFont(); + font1.setFontHeightInPoints((short) 12); + font1.setColor(Font.COLOR_RED); + xssfRichTextString.applyFont(startIndex, entIndex + 1, font1); + //其他样式 + Font font2 = workbook.createFont(); + font2.setFontHeightInPoints((short) 12); + font2.setColor(Font.COLOR_NORMAL); + xssfRichTextString.applyFont(entIndex + 1, stringCellValue.length(), font2); + cell.setCellValue(xssfRichTextString); + } + } + } + workbook.write(outputStream); + } catch (IOException e) { + log.error(">>> 导出数据异常:{}", e.getMessage()); + } + } + + + /** + * firstRow 開始行號 根据此项目,默认为2(下标0开始) + * lastRow 根据此项目,默认为最大65535 + * + * @param firstCol 区域中第一个单元格的列号 (下标0开始) + * @param lastCol 区域中最后一个单元格的列号 + * @param strings 下拉内容 + */ + public static void selectListOne(Workbook workbook, int firstCol, int lastCol, String[] strings) { + Sheet sheet = workbook.getSheetAt(0); + // 生成下拉列表 + // 只对(x,x)单元格有效 + CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(1, 65535, firstCol, lastCol); + // 生成下拉框内容 + DataValidationHelper dvHelper = sheet.getDataValidationHelper(); + XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) + dvHelper.createExplicitListConstraint(strings); + XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation( + dvConstraint, cellRangeAddressList); + // 对sheet页生效 + sheet.addValidationData(validation); + } + + } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/user/impl/UserReportPOServiceImpl.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/user/impl/UserReportPOServiceImpl.java index d008e34de..7afa6ab3d 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/user/impl/UserReportPOServiceImpl.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/user/impl/UserReportPOServiceImpl.java @@ -512,7 +512,7 @@ public class UserReportPOServiceImpl extends ServiceImpl()); + ExcelUtil.exportExcelPullDownOne(exportParams, "敏感及重要用户模板.xlsx", pullDowns, SensitiveUserExcel.class, new ArrayList<>()); }