EasyExcel基于2.2.6版本自定义合并单元格自定义样式下载多个sheet
生活随笔
收集整理的這篇文章主要介紹了
EasyExcel基于2.2.6版本自定义合并单元格自定义样式下载多个sheet
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先創建工作輸出流
OutputStream outputStream = getOutputStream(request, response, fileName);創建寫Excel文件
ExcelWriter excelWriter = EasyExcel.write(outputStream, clazz).registerWriteHandler(new MergeStrategy(mergeMap)).registerWriteHandler(new CustomWriteCellStyle(sheetMap)).build();寫入多個sheet 這里可以循環寫入
WriteSheet writeSheet = EasyExcel.writerSheet(key).build();最后關閉
excelWriter.finish();對此讀者應該還有疑問MergeStrategy、CustomWriteCellStyle 這兩個類是干什么用的
MergeStrategy 是自定義的合并策略
public class MergeStrategy implements CellWriteHandler {//合并策略map string:sheet名字 Integer:行數 List:合并的列private Map<String,Map<Integer,List<ColumnRangeDto>>> listMap;private static final int ROWINDEX =3; //在本行下執行private static final int COLUMNINDEX =0;//在本列下執行public MergeStrategy(Map<String,Map<Integer,List<ColumnRangeDto>>> listMap) {this.listMap = listMap;}@Overridepublic void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {}@Overridepublic void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {}@Overridepublic void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {}@Overridepublic void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {if (cell.getRowIndex() == ROWINDEX && cell.getColumnIndex() == COLUMNINDEX) {Map<Integer, List<ColumnRangeDto>> integerListMap = listMap.get(writeSheetHolder.getSheet().getSheetName());if (!CollectionUtils.isEmpty(integerListMap)){integerListMap.forEach((key,value)->{if(!CollectionUtils.isEmpty(value)){value.forEach(it->{writeSheetHolder.getSheet().addMergedRegionUnsafe(new CellRangeAddress(key, key, it.getStart(), it.getEnd()));});}});}}} }CustomWriteCellStyle 自定義樣式
public class CustomWriteCellStyle implements CellWriteHandler {Logger log = LoggerFactory.getLogger(MergeStrategy.class);//sheel和行做對應private Map<String,Integer> sheetMap;public CustomWriteCellStyle(Map<String, Integer> sheetMap) {this.sheetMap = sheetMap;}@Overridepublic void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {}@Overridepublic void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {}@Overridepublic void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {}@Overridepublic void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {Map<String,Object> map =new HashMap<>();Integer integer = sheetMap.get(writeSheetHolder.getSheet().getSheetName());if(integer ==null){//設置默認樣式map.put(CellUtil.FILL_PATTERN, FillPatternType.SOLID_FOREGROUND);map.put(CellUtil.FILL_BACKGROUND_COLOR, IndexedColors.GREY_25_PERCENT.getIndex());map.put(CellUtil.FILL_FOREGROUND_COLOR, IndexedColors.GREY_25_PERCENT.getIndex());}else{//當前sheet和提前設定好的相同按照設定的設置樣式//if(cell.getRowIndex()<7){//7行前的樣式map.put(CellUtil.FILL_PATTERN, FillPatternType.SOLID_FOREGROUND);map.put(CellUtil.FILL_BACKGROUND_COLOR, IndexedColors.GREY_25_PERCENT.getIndex());map.put(CellUtil.FILL_FOREGROUND_COLOR, IndexedColors.GREY_25_PERCENT.getIndex());}else if(cell.getRowIndex()<11){if(cell.getRowIndex()==8){//模板名稱這行樣式居中map.put(CellUtil.ALIGNMENT,HorizontalAlignment.CENTER);}map.put(CellUtil.FILL_PATTERN, FillPatternType.SOLID_FOREGROUND);map.put(CellUtil.FILL_BACKGROUND_COLOR, IndexedColors.WHITE1.getIndex());map.put(CellUtil.FILL_FOREGROUND_COLOR, IndexedColors.WHITE1.getIndex());}else if(cell.getRowIndex()>(11+integer)){//表格下面刷白并且右對齊map.put(CellUtil.ALIGNMENT,HorizontalAlignment.RIGHT);map.put(CellUtil.FILL_PATTERN, FillPatternType.SOLID_FOREGROUND);map.put(CellUtil.FILL_BACKGROUND_COLOR, IndexedColors.WHITE1.getIndex());map.put(CellUtil.FILL_FOREGROUND_COLOR, IndexedColors.WHITE1.getIndex());}else {//保養內容和完成情況列加邊框if(cell.getColumnIndex()==1||cell.getColumnIndex()==2||cell.getColumnIndex()==3||cell.getColumnIndex()==4){map.put(CellUtil.ALIGNMENT,HorizontalAlignment.CENTER);map.put(CellUtil.BORDER_BOTTOM, BorderStyle.THIN);map.put(CellUtil.BORDER_LEFT, BorderStyle.THIN);map.put(CellUtil.BORDER_RIGHT, BorderStyle.THIN);map.put(CellUtil.BORDER_TOP, BorderStyle.THIN);}else{//其他地方背景白色map.put(CellUtil.FILL_PATTERN, FillPatternType.SOLID_FOREGROUND);map.put(CellUtil.FILL_BACKGROUND_COLOR, IndexedColors.WHITE1.getIndex());map.put(CellUtil.FILL_FOREGROUND_COLOR, IndexedColors.WHITE1.getIndex());}}}CellUtil.setCellStyleProperties(cell,map);}最后附上效果圖
總結
以上是生活随笔為你收集整理的EasyExcel基于2.2.6版本自定义合并单元格自定义样式下载多个sheet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【黑马pink老师函数及应用作业】写一个
- 下一篇: 安卓跨进程通信