/**
* 导出excel不固定列
*
* @param request
* @param hrLaborContract
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, HrLaborContract hrLaborContract, HttpServletResponse response) {
// Step.1 组装查询条件
QueryWrapper<HrLaborContract> queryWrapper = getQueryWrapper(hrLaborContract, request);
String companyId = hrLaborContract.getCompanyId();
if (!"all".equals(companyId)) {
if(StringUtils.isBlank(companyId)){
companyId = JwtUtil.getCompanyId();
companyId = StringUtils.isBlank(companyId) ? "001" : companyId;
}
queryWrapper.eq("company_id", companyId);
}
// 过滤选中数据
String selections = request.getParameter("selections");
if (oConvertUtils.isNotEmpty(selections)) {
List<String> selectionList = Arrays.asList(selections.split(","));
queryWrapper.in("id",selectionList);
}
// Step.2 获取导出数据
Page<HrLaborContract> page = new Page<HrLaborContract>(0, 99999);
IPage<HrLaborContract> pageList = hrLaborContractService.myPage(page, queryWrapper);
List<HrLaborContract> exportList = pageList.getRecords();
// 生成excel
List<ExcelExportEntity> entityList = new ArrayList<>();
// 主表头
List<String> heade = new ArrayList<>();
heade.add("序号");
heade.add("姓名");
heade.add("身份证号码");
heade.add("性别");
heade.add("出生年月");
heade.add("部门");
heade.add("岗位");
heade.add("合同主体");
heade.add("最新合同到期日期");
heade.add("初次签订合同日期");
heade.add("初次合同截止日期");
// 整理数据
List<Map<String,Object>> mapList = new ArrayList<>();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// 新增列最大值
int headeMaxIdex = 0;
for(int i = 0; i < exportList.size(); i++){
HrLaborContract item = exportList.get(i);
// 数据跟表头一一对应
Map<String,Object> map = new HashMap<>();
map.put("序号", i+1);
map.put("姓名", item.getEmployeeName());
map.put("身份证号码", item.getCardNumber());
// 遍历字典输出字典值
List<DictModel> sexDictList = sysBaseAPI.queryDictItemsByCode("sex");
for(DictModel model : sexDictList){
if(model.getValue().equals(item.getSex())){
map.put("性别", model.getText());
}
}
map.put("出生年月", item.getBirthdate() !=null ? format.format(item.getBirthdate()) : "");
map.put("部门", item.getOrgCodeTxt());
map.put("岗位", item.getJobPost());
List<DictModel> contractTypeDictList = sysBaseAPI.queryDictItemsByCode("contract_type");
// 遍历字典输出字典值
for(DictModel model : contractTypeDictList){
if(model.getValue().equals(item.getContractType())){
map.put("合同主体", model.getText());
}
}
if("99".equals(item.getContractDuration())){
map.put("最新合同到期日期", "永久");
}else{
map.put("最新合同到期日期", item.getContractEndTime() != null ?format.format(item.getContractEndTime()) : "");
}
map.put("初次签订合同日期", item.getFirstSignDate() !=null ? format.format(item.getFirstSignDate()) : "");
map.put("初次合同截止日期", item.getFirstSignEndDate() !=null ? format.format(item.getFirstSignEndDate()) : "");
// 查询续签
List<HrLaborContractRenewal> contractRenewals = contractRenewalService.list(new LambdaQueryWrapper<HrLaborContractRenewal>().eq(HrLaborContractRenewal::getFirstId, item.getId()));
if(contractRenewals!= null && contractRenewals.size() > 0){
// 遍历续签
for(int indexRenewal = 0; indexRenewal < contractRenewals.size(); indexRenewal++){
HrLaborContractRenewal itemRenewal = contractRenewals.get(indexRenewal);
// 续签是否多余一生成列
if(indexRenewal >= headeMaxIdex){
//新增列
headeMaxIdex ++;
heade.add("续签" + headeMaxIdex + "止");
}
// 数据
if("99".equals(itemRenewal.getContractDuration())){
map.put("最新合同到期日期", "永久");
map.put("续签" + (indexRenewal + 1) + "止", "永久");
} else {
map.put("续签" + (indexRenewal + 1) + "止", itemRenewal.getContractEndTime() !=null ? format.format(itemRenewal.getContractEndTime()) : "");
}
}
}
mapList.add(map);
}
// 生成列
for (String s : heade) {
ExcelExportEntity excelExportEntity = new ExcelExportEntity(s, s);
entityList.add(excelExportEntity);
}
// 输出流
ServletOutputStream out = null;
try {
// sheet页
ExportParams exportParams = new ExportParams("劳动合同台账","劳动合同台账");
exportParams.setStyle(ExcelExportStylerBorderImpl.class); // 设置样式
// 生成excel
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, mapList);
// 自动列宽
HSSFSheet sheet = ((HSSFSheet) workbook.getSheetAt(0));
for (int i = 0; i < entityList.size(); i++) {
sheet.autoSizeColumn(i);
sheet.setColumnWidth(i, sheet.getColumnWidth(i) * 17 / 10); // 中文宽度
int minWidth = entityList.get(i).getName().length() * 600;
if (sheet.getColumnWidth(i) < minWidth)
sheet.setColumnWidth(i, minWidth); // 无数据额外处理
}
// 获取输出流
out = response.getOutputStream();
// 将excel写入输出流
workbook.write(out);
// 强制刷新流
out.flush();
// 关闭流
out.close();
} catch (IOException e) {
e.printStackTrace();
}
// Step.3 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView();
// mv.addObject(TemplateExcelConstants.PARAMS, exportParams);//参数
mv.addObject(NormalExcelConstants.FILE_NAME, "劳动合同台账.xlsx");
mv.addObject(out);
return mv;
}
jeecg导出excel不固定列
于 2023-07-18 18:11:06 首次发布