easyexcel--多sheet页导入导出

多sheet页导出

核心代码就是下图里面的,使用EasyExcel.writeSheet创建一个sheet,然后用excelWriter写入就行了,很简单

java 复制代码
    @GetMapping("downloadMultiSheet")
    public void downloadMultiSheet(HttpServletResponse response) throws IOException {
        // 导出excel如果失败会返回json
        try {
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
            String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=" + fileName + ".xlsx");

            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
            // 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样。
            // sheetNo从0开始
            WriteSheet writeSheet = EasyExcel.writerSheet(0, "用户").head(User.class).build();
            // 去数据库查找数据
            List<User> users = userService.list();
            excelWriter.write(users, writeSheet);
            writeSheet = EasyExcel.writerSheet(1, "部门").head(Department.class).build();
            // 去数据库查找数据
            List<Department> departments = departmentService.list();
            excelWriter.write(departments, writeSheet);
            // 写完要关闭,否则缓冲区数据会丢失
            excelWriter.close();
        } catch (Exception e) {
            // 重置response
            response.reset();
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            Map<String, String> map = MapUtils.newHashMap();
            map.put("status", "failure");
            map.put("message", "下载文件失败" + e.getMessage());
            response.getWriter().println(JSON.toJSONString(map));
        }
    }

多sheet导入

核心代码如图所示,使用EasyExcel.readSheet读取不同的sheet

java 复制代码
    @PostMapping("uploadMultiSheet")
    public Result uploadMultiSheet(@RequestPart MultipartFile file) throws IOException {
        try (ExcelReader excelReader = EasyExcel.read(file.getInputStream()).build()) {
            // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
            // sheetNo从0开始
            ReadSheet readSheet1 =
                    EasyExcel.readSheet(0).head(User.class).registerReadListener(new PageReadListener<User>(users -> {
                        userService.saveBatch(users);
                    })).build();
            ReadSheet readSheet2 =
                    EasyExcel.readSheet(1).head(Department.class).registerReadListener(new PageReadListener<Department>(departments -> {
                        departmentService.saveBatch(departments);
                    })).build();
            // 这里注意 一定要把sheet1 sheet2 一起传进去,不然有个问题就是03版的excel 会读取多次,浪费性能
            excelReader.read(readSheet1, readSheet2);
        }
        return resultOk();
    }
相关推荐
Joy T13 分钟前
Spring AI 2.0 Agent 进阶:Memory、State 与 Context Engineering 常见技术全景
java·人工智能·后端·spring·agent入门·agent state
估值探索者15 分钟前
【Python量化系统工程化 #08】关了 SSH 就停?systemd 让脚本开机自启 + 异常自动拉起
java·c++·人工智能·分类·数据挖掘
RAN114267600825 分钟前
1.3第一个程序的介绍
开发语言·qt
天若有情67326 分钟前
C++花式魔改!手写头文件复刻Java语法,彻底打破编码思维定式
java·c++·语言做语言·jac++
blue_ice .1 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
远翔调光芯片^138287988721 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居
西峰u2 小时前
Java单例模式|从基础到多线程安全
java·java单例模式
ClinicTech2 小时前
实验室洗瓶机的清洗系统架构与自动化控制解析
java·python
linmengmeng_13142 小时前
【总结】MyBatis-Plus批量插入与清表的正确姿势
java·spring boot·mysql·mybatis
木井巳2 小时前
【记忆化搜索】不同路径
java·算法·leetcode·深度优先·剪枝·推荐算法