jeecg导出excel不固定列

/**
    * 导出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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值