jeecg导出改装(多表关联导出 )

前言

jeecg导出 只能导出单表或者主子表。但是往往写的报表(关联很多表)也导出需要

源代码

	/**
    * 导出excel
    *
    * @param request
    */
   protected ModelAndView exportXls(HttpServletRequest request, T object, Class<T> clazz, String title) {
        // Step.1 组装查询条件
        QueryWrapper<T> queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap());
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();

        // Step.2 获取导出数据
        List<T> pageList = service.list(queryWrapper);
        List<T> exportList = null;

        // 过滤选中数据
        String selections = request.getParameter("selections");
        if (oConvertUtils.isNotEmpty(selections)) {
            List<String> selectionList = Arrays.asList(selections.split(","));
            exportList = pageList.stream().filter(item -> selectionList.contains(getId(item))).collect(Collectors.toList());
        } else {
            exportList = pageList;
        }

        // Step.3 AutoPoi 导出Excel
        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
        mv.addObject(NormalExcelConstants.FILE_NAME, title); //此处设置的filename无效 ,前端会重更新设置一下
        mv.addObject(NormalExcelConstants.CLASS, clazz);
        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title));
        mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
        return mv;
    }

改动之后

    /**
     * 自定义导出excel
     *
     * @param request
     */
    protected ModelAndView customExportXls(HttpServletRequest request, T object, Class<T> clazz, String title,List<T> pageList) {
        // Step.1 组装查询条件
        // QueryWrapper<T> queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap());
        // Step.2 获取导出数据
        // List<T> pageList = service.list(queryWrapper);

        List<T> exportList = null;
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        // 过滤选中数据
        String selections = request.getParameter("selections");
        if (oConvertUtils.isNotEmpty(selections)) {
            List<String> selectionList = Arrays.asList(selections.split(","));
            exportList = pageList.stream().filter(item -> selectionList.contains(getId(item))).collect(Collectors.toList());
        } else {
            exportList = pageList;
        }
        // Step.3 AutoPoi 导出Excel
        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
        mv.addObject(NormalExcelConstants.FILE_NAME, title); //此处设置的filename无效 ,前端会重更新设置一下
        mv.addObject(NormalExcelConstants.CLASS, clazz);
        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title));
        mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
        return mv;
    }
  1. 其实改动并不大 只需要将你查询的集合 传进来
    把List pageList = service.list(queryWrapper); 给替换掉就行了。

业务代码实现

    /**
    * 导出excel
    *
    * @param request
    * @param dormSubsidy
    */
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, DormSubsidy dormSubsidy) {
		QueryWrapper<DormSubsidy> queryWrapper = QueryGenerator.initQueryWrapper(dormSubsidy, request.getParameterMap());
		queryWrapper.orderByDesc("gzfdd");
		List<DormSubsidy> list = dormSubsidyService.list(queryWrapper);
		return super.customExportXls(request,dormSubsidy,DormSubsidy.class,"公租房补贴",list);
    }
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Jeecg 是一款基于代码生成器和模板引擎的开源快速开发框架,它提供了丰富的代码生成功能,包括导出 Excel 功能。下面是 Jeecg导出 Excel 的示例代码: 1. 首先在需要导出 Excel 的 Controller 中注入 ExcelUtil 工具类: ```java @Autowired private ExcelUtil excelUtil; ``` 2. 在需要导出 Excel 的方法中使用 ExcelUtil 工具类生成 Excel 文件: ```java @RequestMapping(value = "/exportExcel") public void exportExcel(HttpServletRequest request, HttpServletResponse response) { // 查询数据 List<MyEntity> dataList = myService.getDataList(); // 定义表头 String[] headers = {"ID", "名称", "时间"}; // 定义数据字段 String[] fields = {"id", "name", "time"}; // 使用 ExcelUtil 工具类生成 Excel 文件 excelUtil.exportExcel("导出数据", headers, fields, dataList, response); } ``` 其中,`MyEntity` 是需要导出的实体类,`getDataList()` 方法是从数据库或其他地方获取需要导出的数据,`headers` 数组存放 Excel 表头,`fields` 数组存放实体类的属性名与表头对应,最后调用 `exportExcel` 方法生成 Excel 文件并返回给前端。 3. ExcelUtil 工具类示例代码: ```java public class ExcelUtil { /** * 导出 Excel 文件 * * @param title Excel 标题 * @param headers 表头 * @param fields 数据字段 * @param dataList 数据列表 */ public void exportExcel(String title, String[] headers, String[] fields, List<?> dataList, HttpServletResponse response) { try { // 创建工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); // 创建工作表 HSSFSheet sheet = workbook.createSheet(title); // 创建表头行 HSSFRow headerRow = sheet.createRow(0); // 设置表头单元格样式 HSSFCellStyle headerCellStyle = workbook.createCellStyle(); headerCellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex()); headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerCellStyle.setAlignment(HorizontalAlignment.CENTER); headerCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); headerCellStyle.setBorderTop(BorderStyle.THIN); headerCellStyle.setBorderBottom(BorderStyle.THIN); headerCellStyle.setBorderLeft(BorderStyle.THIN); headerCellStyle.setBorderRight(BorderStyle.THIN); // 创建表头单元格 for (int i = 0; i < headers.length; i++) { HSSFCell headerCell = headerRow.createCell(i); headerCell.setCellValue(headers[i]); headerCell.setCellStyle(headerCellStyle); } // 设置数据单元格样式 HSSFCellStyle dataCellStyle = workbook.createCellStyle(); dataCellStyle.setAlignment(HorizontalAlignment.CENTER); dataCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); dataCellStyle.setBorderTop(BorderStyle.THIN); dataCellStyle.setBorderBottom(BorderStyle.THIN); dataCellStyle.setBorderLeft(BorderStyle.THIN); dataCellStyle.setBorderRight(BorderStyle.THIN); // 创建数据单元格 for (int i = 0; i < dataList.size(); i++) { HSSFRow dataRow = sheet.createRow(i + 1); Object obj = dataList.get(i); for (int j = 0; j < fields.length; j++) { HSSFCell dataCell = dataRow.createCell(j); Field field = obj.getClass().getDeclaredField(fields[j]); field.setAccessible(true); Object value = field.get(obj); if (value instanceof Date) { dataCell.setCellValue((Date) value); } else { dataCell.setCellValue(value.toString()); } dataCell.setCellStyle(dataCellStyle); } } // 设置响应头 response.setContentType("application/octet-stream;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + new String((title + ".xls").getBytes(), "iso-8859-1")); // 输出 Excel 文件 workbook.write(response.getOutputStream()); response.getOutputStream().flush(); response.getOutputStream().close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 以上就是 Jeecg导出 Excel 的示例代码,你可以根据自己的需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值