easyexcel模板填充导出一对多List集合代码如何实现
时间: 2023-06-09 17:03:52 浏览: 528
您好,对于该问题,您可以使用 easyexcel 提供的 WriteHandler 接口,自定义实现一个多行数据填充的逻辑。具体实现步骤如下:
1. 实现 WriteHandler 接口,重写 beforeSheetCreate() 方法和 afterSheetCreate() 方法。
```
public class ExcelHandler implements WriteHandler {
private List<List<Object>> dataList;
public ExcelHandler(List<List<Object>> dataList) {
this.dataList = dataList;
}
@Override
public void beforeSheetCreate(String sheetName, int sheetIndex) {
// no-op
}
@Override
public void afterSheetCreate(String sheetName, int sheetIndex) {
// 获取工作簿和表头行
WriteSheet sheet = EasyExcel.writerSheet(sheetIndex, sheetName).build();
Sheet sheet1 = sheet.getSheet();
Row row = sheet1.getRow(0);
// 获取表头单元格的数量
int cellNum = row.getPhysicalNumberOfCells();
// 设置单元格样式
CellStyle cellStyle = sheet1.getWorkbook().createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
Font font = sheet1.getWorkbook().createFont();
font.setBold(true);
cellStyle.setFont(font);
// 根据数据生成行
for (int i = 0, rowNum = 1; i < dataList.size(); i++, rowNum++) {
List<Object> subList = dataList.get(i);
Row newRow = sheet1.createRow(rowNum);
for (int j = 0; j < cellNum; j++) {
Cell cell = newRow.createCell(j);
// 设置单元格值和样式
cell.setCellValue(subList.get(j) == null ? "" : subList.get(j).toString());
cell.setCellStyle(cellStyle);
}
}
}
}
```
2. 在导出时添加 WriteHandler。
```
// 定义导出的数据
List<List<Object>> data = new ArrayList<>();
data.add(Arrays.asList("name", "age", "gender"));
data.add(Arrays.asList("Lucy", 18, "Female"));
data.add(Arrays.asList("Tom", 20, "Male"));
// 添加 WriteHandler
ExcelHandler handler = new ExcelHandler(data);
// 导出 Excel
EasyExcel.write("test.xlsx")
.head(Arrays.asList("姓名", "年龄", "性别"))
.registerWriteHandler(handler)
.sheet("测试")
.doWrite(data);
```
这样就可以实现将一对多的数据填充到 Excel 的功能了。希望能对您有所帮助。
阅读全文