表头1:景点客流统计,为动态表头,每个表不一样;
表头2:日期
表头3:固定的表头
该表导出采用@ExcelProperty注解形式进行处理的
//"${bigHead}","${dateHead}" 为可自行配置的动态表头
@ExcelProperty(value = {"${bigHead}","${dateHead}","序号"}, index = 0)
private Integer serialNumber;
在导出的时候需要处理实体上配置的的动态表头
package com.tengyun.ykt.customer.util;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.springframework.util.ObjectUtils;
import org.springframework.util.PropertyPlaceholderHelper;
import java.util.List;
import java.util.Properties;
@Slf4j
public class ExcelTitleHandler implements CellWriteHandler {
/**
错误信息处理时正则表达式的格式
*/
private final String EXCEL_ERROR_REG = "^(.*)(\\(错误:)(.*)(\\))$";
private String bigHead;
private String dateHead;
PropertyPlaceholderHelper placeholderHelper = new PropertyPlaceholderHelper("${", "}");
public ExcelTitleHandler( String bigHead,String dateHead) {
this.bigHead = bigHead; //表头1
this.dateHead = dateHead; //表头2
}
@Override
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
// 动态设置表头字段
if (!ObjectUtils.isEmpty(head)) {
List<String> headNameList = head.getHeadNameList();
if (CollectionUtils.isNotEmpty(headNameList)) {
Properties properties = new Properties();
properties.setProperty("bigHead", bigHead);
properties.setProperty("dateHead", dateHead);
for (int i = 0 ; i < headNameList.size() ; i++){
// 循环遍历替换
headNameList.set(i, placeholderHelper.replacePlaceholders(headNameList.get(i), properties));
}
}
}
}
@Override
public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
}
@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
}
}
EasyExcel.write(response.getOutputStream(), TicketTouristStatisticsByItineraryResultVo.class)
//插入数据
.sheet(sheetName)
.registerWriteHandler(new ExcelTitleHandler("表头1","表头2"))
.doWrite(ticketTouristStatisticsByItineraryResultVos);