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

浙公网安备 33010602011771号