/** * 编程式配置导出(动态定义报表区域、命令) * 适合动态调整报表结构、复杂分支场景 */public void exportDynamicReport(HttpServletResponse response, List<Employee> employeeList) throws IOException { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment;filename=动态报表.xlsx"); try (InputStream templateStream = getClass().getResourceAsStream("/excel/dynamic_tpl.xlsx"); OutputStream outStream = response.getOutputStream()) { // 1. 初始化Jxls处理器 JxlsTransformerFactory transformerFactory = JxlsTransformerFactory.createPoiFactory(); JxlsProcessor processor = new JxlsProcessor(transformerFactory); Context context = new Context(); context.putVar("employees", employeeList); // 2. 代码手动定义each循环区域:从A4-D4区域循环遍历employees集合 Area area = new Area("A4", "D4"); // 绑定循环命令 EachCommand eachCommand = new EachCommand("employees", "employee", area); // 注册命令到处理器 processor.registerCommand(eachCommand); // 3. 执行模板渲染导出 processor.process(templateStream, outStream, context); }} |