主要的代码罗列如下:
/**
* 上传带数据的模板
*
* @param headerList 模板表头
* @param list 模板数据
* @param process 进程
* @param tenantId 企业id
* @param grantId 操作员id
* @return url
*/
public String uploadWithData(List<FieldBaseVO> headerList, List<Map<String, DataBaseVO>> list, Process process, Long tenantId, Long grantId) {
try (OutputStream out = new FileOutputStream(fileName + "xlsx") {
ExcelWriter writer = EasyExcelFactory.getWriter(out);
//设置表格编号
Sheet sheet1 = getSheet(headerList);
writer.write1(generateFormData(headerList, list, process, tenantId, grantId), sheet1);
mergeNotList(writer, headerList, list);
writer.finish();
} catch (Exception e) {
e.printStackTrace();
}
return uploadTemplateByFile();
}
/**
* 根据表头生成sheet模板
*
* @param headerList 表头数据
* @return sheet
*/
private Sheet getSheet(List<FieldBaseVO> headerList) {
//设置表格编号
Sheet sheet1 = new Sheet(1);
//设置表格名称
sheet1.setSheetName("第一个form模板");
//设置表格header
//计算,并生成header的行数
int rowNumber = anysisRowNumber(headerList, 1);
//生成header
List<List<String>> head = transHeader(headerList, rowNumber);
sheet1.setHead(head);
return sheet1;
}
/**
* 根据表头和表数据,生成对应的表数据;
*
* @param headerList 表头
* @param formDatas 表数据
* @param process 当前进程
* @param tenantId 企业id
* @param grantId 操作员
* @return 返回填充后的表
*/
private List<List<Object>> generateFormData(List<FieldBaseVO> headerList, List<Map<String, DataBaseVO>> formDatas,Process process, Long tenantId, Long grantId) {
...
}
/**
* 合并非list类型的数据,合并行数为list.size()
*
* @param writer 当前操作的ExcelWriter
* @param headerList 表头
* @param formDatas 数据
*/
private void mergeNotList(ExcelWriter writer, List<FieldBaseVO> headerList, List<Map<String, DataBaseVO>> formDatas) {
// writer.merge(i, i+1, j, j+1); // i,j从0开始
...
}