导出
导出比较简单,如果加入自定义的东西,样式、合并等可参考下边,追加至registerWriteHandler
里即可。
EasyExcel.write(response.getOutputStream())
// 这里放入动态头
.head(header).sheet("Sheet1").registerWriteHandler(WriteCellStyle()).registerWriteHandler(new ExcelMergeStrategy()).registerWriteHandler(new ExcelWidthStyleStrategy())
.doWrite(dataList);
样式
HorizontalCellStyleStrategy
类,构造参数是headWriteCellStyle
和 contentWriteCellStyle
,分别为表头样式和内容样式
private HorizontalCellStyleStrategy WriteCellStyle() {
WriteCellStyle writeCellStyle = new WriteCellStyle();
writeCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
writeCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
writeCellStyle.setBorderBottom(BorderStyle.THIN);
writeCellStyle.setBorderLeft(BorderStyle.THIN);
writeCellStyle.setBorderRight(BorderStyle.THIN);
writeCellStyle.setBorderTop(BorderStyle.THIN);
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(writeCellStyle, writeCellStyle);
return horizontalCellStyleStrategy;
}
自适应列宽
AbstractColumnWidthStyleStrategy
类,具体实现可自定义
class ExcelWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {
@Override
protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
boolean needSetWidth = isHead && cell.getColumnIndex() < 2;
if (needSetWidth) {
writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), 5000);
}
}
}
合并单元格
AbstractMergeStrategy
类,具体情况具体分析,主要是colIndex
和rowIndex
class ExcelMergeStrategy extends AbstractMergeStrategy {
@Override
protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
int colIndex = cell.getColumnIndex();
int rowIndex = dateType.equals("year") ? cell.getRowIndex() - 1 : cell.getRowIndex();
if (colIndex == 0 && rowIndex % 3 == 0) {
//System.out.println(cell.getRowIndex());
CellRangeAddress cellAddresses1 = new CellRangeAddress(cell.getRowIndex() - 2, cell.getRowIndex(), 0, 0);
CellRangeAddress cellAddresses2 = new CellRangeAddress(cell.getRowIndex() - 2, cell.getRowIndex(), 1, 1);
CellRangeAddress cellAddresses3 = new CellRangeAddress(cell.getRowIndex() - 2, cell.getRowIndex(), 2, 2);
sheet.addMergedRegionUnsafe(cellAddresses1);
sheet.addMergedRegionUnsafe(cellAddresses2);
sheet.addMergedRegionUnsafe(cellAddresses3);
}
}
}