场景:需要将导出成功的sheet页模板改为多个sheet页模板
问题出现原因:使用Easy Excel填充数据时只有有空数据
解决:不使用之前的excel方法,换个方法即可
ExcelWriter excelWriter = null;
//第一个sheet
excelWriter = EasyExcel.write(response.getOutputStream()).build();
WriteSheet sheet0 = EasyExcel.writerSheet(0, "导出").head(Dto.class).build();
excelWriter.write(tableIDList, sheet0);
//第二个sheet页
WriteSheet sheet1 = EasyExcel.writerSheet(1, "第二个sheet").head(Dto.class).build();
excelWriter.write(List, sheet1);
excelWriter.finish();
需要多少个sheet页就可以按照此方法添加,也可以导出不同的sheet页表头,替换Dto.class即可
如果你发现导出的时候报 ExcelDataConvertException:Can not find 'Converter' support class ArrayList错误,那么恭喜你需要写转换器了
原因 :
解释:
EasyExcel自身实现了一些常用类型的Converter来支持excel数据到对象的转换,例如 BigDecimal、Bolean、Byte[]、btye[]、Byte、Date、Double、File、Float、InputStream、Integer、Long、Short、Url。若使用了其他数据类型 或 想定制化数据转换方式,需要实现自己的Converter,并在使用EasyExcel时注册
源头:
是因为使用的实体类对象中存在ArrayList,你的报什么错就写什么转换器用即可
@ApiModelProperty("多个对象")
private List<Item> children = new ArrayList();
解决:
首先书写Converter转换器
package cn.crec.hr.basic.staff.convert.organ;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
public class ListConverter implements Converter<ArrayList> {
@Override
public Class supportJavaTypeKey() {
return ArrayList.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public ArrayList convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
String stringValue = cellData.getStringValue();
String[] split = stringValue.split(",");
ArrayList<String> enterpriseList = new ArrayList<>();
for (int i = 0; i < split.length; i++) {
enterpriseList.add(split[i]);
}
return enterpriseList;
}
@Override
public CellData convertToExcelData(ArrayList list, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
StringBuilder stringBuilder = new StringBuilder();
list.forEach(o -> {
String s = o.toString();
stringBuilder.append(s + ",");
});
return new CellData(stringBuilder.toString());
}
}
在 EasyExcel中注册
WriteSheet writeSheet1 = EasyExcel.writerSheet(sheet, sheetName).registerConverter(new ListConverter()).head(DictDto.class).build();
excelWriter.write(zwucu, writeSheet1);
最后就可正常导出多个sheet页
本文参考了许多的文章,项目写好后又让写其他东西,导致找不到链接了