主要记录一下用easy做复杂的头部样式处理
最终效果如下:
过程:
为了支持和方便后续不同的样式处理,此处以注解的方式注入拦截器,通过参数不同做不同的操作
1.正常的写excel操作
2.正常的easy使用和头部样式注解(value为头部内容: 手动换行后面有做解释,type为模块名或编号)
3.工具类里的写excel方法
4.自定义写excel头部样式拦截器
1 /** 2 * 自定义excel头部样式拦截器 3 * @author chenkun 4 * @desc 5 * @datetime 2020/9/30 14:33 6 */ 7 8 public class StyleExcelHandler implements SheetWriteHandler { 9 10 @Override 11 public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { 12 13 } 14 15 @Override 16 public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { 17 18 Class clazz = writeSheetHolder.getClazz(); 19 ExcelHeadStyle annotation = (ExcelHeadStyle) clazz.getAnnotation(ExcelHeadStyle.class); 20 if (annotation != null) { 21 switch (annotation.type()) { 22 case BASE: 23 doBase(writeWorkbookHolder, annotation); 24 break; 25 case EXCEL_DSMD: 26 doInstructor(writeWorkbookHolder, annotation); 27 break; 28 default: 29 // doAnything 30 break; 31 } 32 } 33 34 } 35 36 private void doInstructor(WriteWorkbookHolder writeWorkbookHolder, ExcelHeadStyle annotation) { 37 Workbook workbook = writeWorkbookHolder.getWorkbook(); 38 Sheet sheet = workbook.getSheetAt(0); 39 // 合并单元格 40 CellRangeAddress cra =new CellRangeAddress(0, 0, 0, 10); // 起始行, 终止行, 起始列, 终止列 41 sheet.addMergedRegion(cra); 42 // 设置标题 43 Row row1 = sheet.createRow(0);// 行 44 row1.setHeight((short) 2200); 45 46 Cell cell1 = row1.createCell(0);// 列 47 // 标题内容(来自注解) 48 cell1.setCellValue(annotation.value()); 49 CellStyle cellStyle = workbook.createCellStyle(); 50 // 文字颜色 51 Font font = workbook.createFont(); 52 font.setColor(IndexedColors.RED.getIndex()); 53 // if (i == 0) {// 第一行加粗 54 // font.setBold(true); 55 // } 56 cellStyle.setFont(font); 57 // 根据手动\n换行 58 cellStyle.setVerticalAlignment(VerticalAlignment.DISTRIBUTED); 59 cell1.setCellStyle(cellStyle); 60 } 61 62 private void doBase(WriteWorkbookHolder writeWorkbookHolder, ExcelHeadStyle annotation) { 63 Workbook workbook = writeWorkbookHolder.getWorkbook(); 64 Sheet sheet = workbook.getSheetAt(0); 65 // 设置标题 66 Row row1 = sheet.createRow(0); 67 row1.setHeight((short) 600); 68 Cell cell1 = row1.createCell(0); 69 // 标题内容(来自注解) 70 cell1.setCellValue(annotation.value()); 71 CellStyle cellStyle = workbook.createCellStyle(); 72 // 自动换行 73 // cellStyle.setWrapText(true); 74 75 // 文字颜色 76 Font font = workbook.createFont(); 77 font.setColor(IndexedColors.RED.getIndex()); 78 cellStyle.setFont(font); 79 // 平铺展开 80 cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); 81 cell1.setCellStyle(cellStyle); 82 } 83 }