ToB企服应用市场:ToB评测及商务社交产业平台
标题:
EasyExcel动态表头导出(支持多级表头)
[打印本页]
作者:
徐锦洪
时间:
2023-10-4 21:15
标题:
EasyExcel动态表头导出(支持多级表头)
EasyExcel动态表头导出(支持多级表头)
在很多业务场景中,都会应用到动态表头的导出,也会涉及到多级表头的导出,如下图所示
通过EasyExcel,我们可以快速实现这一需求,具体代码如下
DynamicHeader
import java.util.List;
/**
*@Author: <a target="_blank" href="https://www.cnblogs.com/mailto:fxsen@foxmail.com">Fxsen</a>
*@CreateTime: 2023年09月22日 09:16
*/
public class DynamicHeader {
/**
* 要导出的字段名称英文
*/
private String fieldName;
/**
* 要导出的表头名称中文
*/
private String headName;
/**
* 如果是多级表都,插入下级
*/
private List<DynamicHeader> children;
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public String getHeadName() {
return headName;
}
public void setHeadName(String headName) {
this.headName = headName;
}
public List<DynamicHeader> getChildren() {
return children;
}
public void setChildren(List<DynamicHeader> children) {
this.children = children;
}
}
复制代码
CustomTitleWriteHandler
[code]import com.alibaba.excel.write.handler.SheetWriteHandler;import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;import org.apache.poi.ss.usermodel.CellStyle;import org.apache.poi.ss.usermodel.*;import org.apache.poi.ss.util.CellRangeAddress;public class CustomTitleWriteHandler implements SheetWriteHandler { /** * 标题 */ private final String fileName; /** * 字段个数 */ private final Integer count; public CustomTitleWriteHandler(Integer count,String fileName) { this.fileName = fileName; this.count = count; } @Override public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { } @Override public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { // 获取clazz所有的属性 Workbook workbook = writeWorkbookHolder.getWorkbook(); Sheet sheet = workbook.getSheetAt(0); Row row1 = sheet.createRow(0); row1.setHeight((short) 800); Cell cell = row1.createCell(0); //设置标题 cell.setCellValue(fileName); CellStyle cellStyle = workbook.createCellStyle(); cellStyle.setBorderBottom(BorderStyle.THIN); //下边框 cellStyle.setBorderLeft(BorderStyle.THIN);//左边框 cellStyle.setBorderTop(BorderStyle.THIN);//上边框 cellStyle.setBorderRight(BorderStyle.THIN);//右边框 cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); cellStyle.setAlignment(HorizontalAlignment.CENTER); Font font = workbook.createFont(); font.setBold(true); font.setFontHeight((short) 400); font.setFontName("宋体"); cellStyle.setFont(font); cell.setCellStyle(cellStyle); CellRangeAddress region = new CellRangeAddress(0, 0, 0, count - 1); setRegionStyle(sheet,region,cellStyle); sheet.addMergedRegion(region); } /** * 为合并的单元格设置样式(可根据需要自行调整) */ public static void setRegionStyle(Sheet sheet, CellRangeAddress region, CellStyle cs) { for (int i = region.getFirstRow(); i
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4