主要記錄一下用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 }