easyexcel怎么设置表头宽度_EasyExcel的不确定表头(根据数据生成表头)的excel导出和二级表头以及设置表头的宽度自适应...
1、效果如图2、Controller@GetMapping("/exportExcel")public void exportExcel(@RequestParam(value = "menu") String menu,@RequestParam(value= "dwflglId") intdwflglId,@RequestParam(value= "qjCode") String qjCode
1、效果如图
2、Controller
@GetMapping("/exportExcel")public void exportExcel(@RequestParam(value = "menu") String menu,
@RequestParam(value= "dwflglId") intdwflglId,
@RequestParam(value= "qjCode") String qjCode,
HttpServletResponse response)throwsIOException {//内容集合
List jthz =getJthz(dwflglId, qjCode);//表头集合
List header =getHeaderOfHz(dwflglId, qjCode);
response.setHeader("Content-Disposition", "attachment; filename=Zjlryshz.xlsx");//响应类型,编码
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
String bigTitle= "资金流入预算表";
EasyExcel.write(response.getOutputStream()).head(getExcelHeader(header, bigTitle)).registerWriteHandler(new Custemhandler()).sheet("资金流入预算导出模板").doWrite(getExportData(jthz));
}
通过getExcelHeader(header, bigTitle)得到表头集合
private List> getExcelHeader(Listheader, String bigTitle) {
List> head = new ArrayList<>();
List head0 = new ArrayList<>();
head0.add(bigTitle);
head0.add("资金项目");
head.add(head0);
head0= new ArrayList<>();
head0.add(bigTitle);
head0.add("行次");
head.add(head0);for(var h : header) {
head0= new ArrayList<>();
head0.add(bigTitle);
head0.add(h.getName());
head.add(head0);
}returnhead;
}
通过调用registerWriteHandler来设置表格样式,我这里设置只是设置表头的自适应宽度,创建一个类来继承AbstractColumnWidthStyleStrategy抽象类
packagecn.xxxx.xxxx.xxx.utils;importcom.alibaba.excel.metadata.CellData;importcom.alibaba.excel.metadata.Head;importcom.alibaba.excel.write.metadata.holder.WriteSheetHolder;importcom.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;importorg.apache.poi.ss.usermodel.Cell;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjava.util.List;public class Custemhandler extendsAbstractColumnWidthStyleStrategy {private static final int MAX_COLUMN_WIDTH = 255;//the maximum column width in Excel is 255 characters
publicCustemhandler() {
}
@Overrideprotected void setColumnWidth(WriteSheetHolder writeSheetHolder, ListcellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {if (isHead && cell.getRowIndex() != 0) {int columnWidth =cell.getStringCellValue().getBytes().length;if (columnWidth >MAX_COLUMN_WIDTH) {
columnWidth=MAX_COLUMN_WIDTH;
}else{
columnWidth= columnWidth + 3;
}
writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth* 256);
}
}private final static Logger logger = LoggerFactory.getLogger(Custemhandler.class);
}
最后在doWrite()里面放要导出的数据即可
private List> getExportData(Listjthz) {
List> sumList = new ArrayList<>();for(var row : jthz) {
List list = new ArrayList<>();
list.add(row.getZjxm());
list.add(String.valueOf(row.getZbY()));for(var xm : row.getZjlrysXms()) {if (xm.getId() == null) {
list.add("");
}else{if (xm.getZjlrysb().getXsValue() == null || xm.getZjlrysb().getXsValue().compareTo(new BigDecimal("0")) == 0) {
list.add("");
}else{
list.add(xm.getZjlrysb().getXsValue().toString());
}
}
}
sumList.add(list);
}returnsumList;
}
无论表头还是内容,传给easyexcel的都是List>这种形式的集合,可以说是二维的吧,外面的List相当于row,里面的List相当于col
参考链接:
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)