首页 > 其他分享 >Springboot使用EasyExcel 的填充模板导出,导出为多Sheet工作簿

Springboot使用EasyExcel 的填充模板导出,导出为多Sheet工作簿

时间:2024-10-11 17:11:32浏览次数:11  
标签:Sheet Springboot 填充 Excel EasyExcel 导出 sheetName new

概述

Springboot使用EasyExcel 的填充模板导出,导出为多Sheet工作簿

详细代码

Excel数据填充

/**
 * 使用 EasyExcel 写入Excel
 * @param excelModelFilePath	模板文件地址
 * @param sheetNameAndDataMap	Sheet名称与Sheet数据Map集合,key为Sheet名称,value为Sheet数据集合
 * @return
 */
public byte[] writeExcelData(String excelModelFilePath, Map<String, List> sheetNameAndDataMap){
        try(
                ByteArrayOutputStream returnStream = new ByteArrayOutputStream();
                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                InputStream resourceAsStream = getClass().getResourceAsStream(excelModelFilePath);){
            XSSFWorkbook workbook = new XSSFWorkbook(resourceAsStream);
            int i = 0;
            for (String sheetName : sheetNameAndDataMap.keySet()) {
                //工作簿名称最长31位,长了会报错
                if (i == 0) {
                    workbook.setSheetName(0, StrUtil.isBlank(sheetName) ? ("Sheet" + i) : StrUtil.sub(sheetName, 0, 30));
                } else {
                    workbook.cloneSheet(0, StrUtil.isBlank(sheetName) ? ("Sheet" + i) : StrUtil.sub(sheetName, 0, 30));
                }
                i++;
            }
            workbook.write(byteArrayOutputStream);
            byte[] bytes = byteArrayOutputStream.toByteArray();
            try (InputStream inputStream = new ByteArrayInputStream(bytes);
                 ExcelWriter excelWriter = EasyExcel.write(returnStream).withTemplate(inputStream).excelType(ExcelTypeEnum.XLSX).build()
            ) {
                i = 0;
                for (Map.Entry<String, List> entry : sheetNameAndDataMap.entrySet()) {
                    String sheetName = entry.getKey();
                    List sheetData = entry.getValue();
                    // 根据Sheet名称填充数据
                    WriteSheet writeSheet = EasyExcel.writerSheet(StrUtil.isBlank(sheetName) ? ("Sheet" + i) : StrUtil.sub(sheetName, 0, 30)).build();
                    excelWriter.fill(sheetData, writeSheet);
                    i++;
                }
                excelWriter.finish();
            }
            return returnStream.toByteArray();
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("Excel写入错误:" + e.getMessage());
        }
    }

注意:在填充模板中的占位符前加上【.】这样才能填充List集合,如果不添加则只能填充单一的KeyValue类型的Map或实体类

image-20241011170141548

导出Excel

@PostMapping("/downloadExcel")
public void downloadExcel(HttpServletResponse response){
    
    String excelModelFilePath = "/xxx/xxx/xxx/模板.xlsx";
    Map<String, List> sheetMap = new HashMap<>();
    sheetMap.put("Sheet1", new ArrayList<>());
    sheetMap.put("Sheet2", new ArrayList<>());
    
    // 写入Excel数据并获取写入后的Excel的byte[]
    byte[] exportExcelByte = service.writeExcelData(excelModelFilePath, sheetMap);

    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setCharacterEncoding(StandardCharsets.UTF_8.toString());
    String fileName = URLEncoder.encode("测试", StandardCharsets.UTF_8.toString());
    response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");
    InputStream inputStream = new ByteArrayInputStream(exportExcelByte);
    IoUtil.copy(inputStream, response.getOutputStream());
}

标签:Sheet,Springboot,填充,Excel,EasyExcel,导出,sheetName,new
From: https://www.cnblogs.com/lucky-jun/p/18458894

相关文章

  • springboot如何做token的拦截校验
    1、新建一个拦截类@ComponentpublicclassLoginInterceptorimplementsHandlerInterceptor{@AutowiredprivateJwtUtiljwtUtil;@Value("${oaTokenKeyword}")privateStringoaTokenKeyword;@OverridepublicbooleanpreHandle(Http......
  • java毕业设计-基于Springboot的多商家商城系统【代码+论文+PPT】
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、部分代码;5、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:Java1.8框架:Springboot数据库:MySQL5.7、8.0开发工具:IntelliJIDEA旗舰版其他:Maven3.8以上二、系统功能管理员管理:负责系统后台的整体运维,包......
  • 基于Springboot网上在线购物商城【附源码+文档】
    ......
  • 如何在springboot中,全局配置produces="text/plain;charset=UTF-8"
    为什么要使用produces="text/plain;charset=UTF-8"?当不用这个配置时,接口返回的数据,是有斜杠的 配置后,就正常了 以前我的配置方式,是在每个接口上,都添加上produces="text/plain;charset=UTF-8"。但是这样显示不太好,每个接口都加的话,会比较耗费时间如何做到全局配置使用W......
  • 基于java+springboot的社区心理健康服务平台系统小程序
    基于java+springboot的社区心理健康服务平台系统,旨在为社区居民提供全面的心理健康支持。后端运用springboot构建稳定可靠的服务,负责处理用户信息管理、心理咨询师资源整合、心理测评工具管理以及预约咨询安排等核心业务,与数据库有效交互以存储用户心理健康档案、咨询......
  • 基于java+springboot的社区汽车共享平台系统
    基于java+springboot的社区汽车共享平台系统,致力于为社区居民提供便捷的汽车共享服务。后端采用springboot构建,高效处理车辆信息管理、用户认证与授权、预订流程控制及费用结算等业务,与数据库紧密交互确保车辆状态、用户信息及预订记录准确存储与快速检索。前端利用相......
  • 基于SpringBoot+Vue的文学创作交流论坛系统设计与实现(源码+lw+部署+讲解)
    技术环境jdk版本:1.8及以上ide工具:Eclipse或者IDEA数据库:mysql5.7编程语言:Javajava框架:SpringBootmaven:3.6.1详细技术:HTML+CSS+JAVA+SpringBoot+MYSQL+VUE+MAVEN功能设计课题主要采用java技术和MySQL数据库技术以及springboot框架进行开发。系统主要包......
  • 基于SpringBoot+Vue的多媒体素材管理系统设计与实现(源码+lw+部署+讲解)
    技术环境jdk版本:1.8及以上ide工具:Eclipse或者IDEA数据库:mysql5.7编程语言:Javajava框架:SpringBootmaven:3.6.1详细技术:HTML+CSS+JAVA+SpringBoot+MYSQL+VUE+MAVEN功能设计该系统采用了java技术、SpringBoot框架,连接MySQL数据库,具有较高的信息传输速率与......
  • springboot企业招聘管理系统
    基于springboot+vue实现的企业招聘管理系统 (源码+L文+ppt)4-089   4.3系统结构设计  构图是系统的体系结构,体系结构是体系结构体系的重要组成部分。系统的总体结构设计如图4-2所示。   图4-2系统总体架构图4.4数据库设计  4.4.1数据库设计原则  ......
  • springboot酒店在线预订系统
    基于springboot+vue实现的酒店在线预订系统 (源码+L文+ppt)4-082                                   4.2 系统结构设计  构图是系统的体系结构,体系结构是体系结构体系的一部分,体系结构体系是体系结......