一、EasyExcel多数据导出到多Sheet工作表
outputStream = response.getOutputStream();
com.alibaba.excel.ExcelWriter writer = EasyExcel
.write(outputStream)
.registerWriteHandler(new CustomMergeStrategy())
.registerWriteHandler(ExcelExportUtil.defaultStylePolicyPolicy())
.build();
List<EventTask1Template> list1 = new ArrayList<>();
list1.add(new EventTask1Template("张三", "20", "男"));
list1.add(new EventTask1Template("张三", "02", "女"));
list1.add(new EventTask1Template("李四", "25", "女"));
WriteSheet sheet1 = EasyExcel.writerSheet("sheet1").head(EventTask1Template.class).build();
writer.write(list1,sheet1);
List<EventTask2Template> list2 = new ArrayList<>();
list2.add(new EventTask2Template("王五", "20", "男"));
list2.add(new EventTask2Template("王五", "02", "女"));
list2.add(new EventTask2Template("赵六", "25", "女"));
WriteSheet sheet2 = EasyExcel.writerSheet("sheet2").head(EventTask2Template.class).build();
writer.write(list2,sheet2);
writer.finish();
WriteSheet sheet1 = EasyExcel.writerSheet("sheet1").head(EventTask1Template.class).build();
这里的head可以用List<List<String>>来自定义动态的表头
自定义合并策略(自行扩充内容)
package com.netintech.core.easyexcel.mergeStrategy;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import java.util.List;
public class CustomMergeStrategy extends AbstractMergeStrategy {
private int[] mergeColumnIndex;
private int mergeRowIndex;
public CustomMergeStrategy() {
}
public CustomMergeStrategy(int mergeRowIndex, int[] mergeColumnIndex) {
this.mergeRowIndex = mergeRowIndex;
this.mergeColumnIndex = mergeColumnIndex;
}
@Override
protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
int curRowIndex = cell.getRowIndex();
int curColIndex = cell.getColumnIndex();
sheet.setColumnWidth(curColIndex,5120);
if (curRowIndex > mergeRowIndex) {
for (int i = 0; i < mergeColumnIndex.length; i++) {
if (curColIndex == mergeColumnIndex[i]) {
mergeWithPrevRow(sheet, cell, curRowIndex, curColIndex);
break;
}
}
}
}
private void mergeWithPrevRow(Sheet sheet, Cell cell, int curRowIndex, int curColIndex) {
Object curData = cell.getCellTypeEnum() == CellType.STRING ? cell.getStringCellValue() : cell.getNumericCellValue();
Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex);
Object preData = preCell.getCellTypeEnum() == CellType.STRING ? preCell.getStringCellValue() : preCell.getNumericCellValue();
Boolean dataBool = preData.equals(curData);
Boolean bool = cell.getRow().getCell(0).getStringCellValue().equals(cell.getSheet().getRow(curRowIndex - 1).getCell(0).getStringCellValue());
if (dataBool && bool) {
List<CellRangeAddress> mergeRegions = sheet.getMergedRegions();
boolean isMerged = false;
for (int i = 0; i < mergeRegions.size() && !isMerged; i++) {
CellRangeAddress cellRangeAddr = mergeRegions.get(i);
if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) {
sheet.removeMergedRegion(i);
cellRangeAddr.setLastRow(curRowIndex);
sheet.addMergedRegion(cellRangeAddr);
isMerged = true;
}
}
if (!isMerged) {
CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex, curColIndex);
sheet.addMergedRegion(cellRangeAddress);
}
}
}
private void mergeCells(Sheet sheet, int columnIndex, int startRowIndex, int endRowIndex) {
CellRangeAddress cellRangeAddress = new CellRangeAddress(startRowIndex, endRowIndex, columnIndex, columnIndex);
sheet.addMergedRegion(cellRangeAddress);
}
}
二、默认样式策略
public static HorizontalCellStyleStrategy defaultStylePolicyPolicy() {
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
headWriteCellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
WriteFont headWriteFont = new WriteFont();
headWriteFont.setFontName("宋体");
headWriteCellStyle.setWriteFont(headWriteFont);
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
WriteFont contentWriteFont = new WriteFont();
contentWriteFont.setFontName("宋体");
contentWriteCellStyle.setWriteFont(contentWriteFont);
return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
}