alibaba的easyexcel自定义列宽
// 初始化标题行(这里存放的是表头内容) List<String> titleList = busDTO.getReportBusParamsFieldList().stream().map(ReportBusParamsFieldDTO::getField_label).collect(Collectors.toList()); //初始化宽度 (这里存放的是表头列宽) List<Integer> widthList = busDTO.getReportBusParamsFieldList() .stream() .mapToInt(ReportBusParamsFieldDTO::getField_width) .map(width -> (int) (width * 1.5)) .boxed() .collect(Collectors.toList()); // 创建一个表格 WriteTable table = new WriteTable(); // 动态添加 表头 headList --> 所有表头行集合 List<List<String>> headList = new ArrayList<>(); for (int x = 0; x < titleList.size(); x++) { List<String> headTitle = new ArrayList<>(); String titleName = titleList.get(x); // 自定义列宽处理器实例 if (StringUtils.isNotEmpty(titleName) && MATCHING_TITLES.contains(titleName)) { widthList.set(x, 400); } headTitle.add(titleName); headList.add(headTitle); } table.setHead(headList); //记录Sheet尺寸(多sheet使用)此对象可以用来针对每列数据格式 List<EasyExcelUtil.Dimension> dimensions = new ArrayList<>(); // 导出数据 ExcelWriter excelWriter = EasyExcelUtil.getWriterWorkbookWriteHandler(file, dimensions, true, headList.size(), widthList); // 根据rows进行sheet分页 WriteSheet sheet = EasyExcel.writerSheet(sheetNo++, table_title + "_" + sheetName).build(); // 数据写入 这里是每列的内容数据 List<List<Object>> data = ReportExportProducerTools.formatData(mapList, busDTO.getReportBusParamsFieldList()); excelWriter.write(data, sheet, table);
上面获取表头数据,列的宽度,导出数据 ExcelWriter,获取WriteSheet,最后将数据写入表格。其中重要的getWriterWorkbookWriteHandler方法是修改单元格格式的
/** * 生成表格写入对象 * @param excel 文件 * @param dimensions 数据 * @param flag 是否需要根据表头列数设置样式 * @param headColumns 表头列数 * @return 文件写入对象 */ public static ExcelWriter getWriterWorkbookWriteHandler(File excel, List<Dimension> dimensions, boolean flag, int headColumns,List<Integer> widthList) { return EasyExcel.write(excel).registerWriteHandler(new AbstractWorkbookWriteHandler() { @Override public void afterWorkbookDispose(WriteWorkbookHolder writeWorkbookHolder) { super.afterWorkbookDispose(writeWorkbookHolder); Workbook workbook = writeWorkbookHolder.getWorkbook(); for (int i = 0; i < workbook.getNumberOfSheets(); i++) { Sheet sheet = workbook.getSheetAt(i); if (flag) { //设置表头样式 Row row = sheet.getRow(0); // 设置表头行高 row.setHeightInPoints(20); // 设置行高为20磅 // 设置表头背景颜色 CellStyle style = workbook.createCellStyle(); //设置背景色 style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); style.setFillPattern(FillPatternType.SOLID_FOREGROUND); //设置文本位置 style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); //设置边框 style.setBorderRight(BorderStyle.DOTTED); int width = 300 * 15; // 获取表头列数 int columnCount = row.getLastCellNum(); // 获取表头单元格并设置样式 for (int j = 0; j < columnCount; j++) { // for (int j = 0; j < headColumns; j++) { Cell cell = row.getCell(j); if (cell == null) { cell = row.createCell(j); } cell.setCellStyle(style); sheet.setColumnWidth(j, widthList!=null?widthList.get(j)*15:width); } } if (sheet instanceof SXSSFSheet) { serRef(sheet, dimensions.get(i)); } } } }).build(); }