java easyexcel 写入数据到excel中的多个sheet中

本文介绍了如何使用EasyExcel在Spring MVC控制器中实现批量下载上传结果的功能,涉及了HTTP请求处理、参数校验、Excel文件生成及定制单元格写入策略。服务类详细展示了如何通过EasyExcel操作数据并设置列宽,以及CustomCellWriteHandler用于处理Excel样式。

controller方法:

@ApiOperation("下载导入结果")
    @RequestMapping(value = "/downloadUploadResut", method = RequestMethod.POST)
    public void batchDownload(HttpServletRequest request,
                              HttpServletResponse response,
                              @RequestBody  DownloadAssetResultDto  downloadAssetResultDto) throws Exception {

        if(downloadAssetResultDto==null || downloadAssetResultDto.getUploadId()==null){
            throw  new RRException("上传数据ID为空,请先上传数据");
        }

        request.setCharacterEncoding("UTF-8");
        String prefix=".xlsx";
        String fileName="uploadResult";
        String userAgent = request.getHeader("User-Agent");
        String     downLoadPath = URLDecoder.decode(fileName, "UTF-8");
        System.out.println(downLoadPath);
        try {

            response.setContentType("application/vnd.ms-excel");
            fileName = URLEncoder.encode(fileName, "ISO8859-1");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
            response.setHeader("filename",fileName);
            Integer uploadId = downloadAssetResultDto.getUploadId();
            downloadAssetService.downloadUploadResut(response,uploadId);


        } catch (Exception e) {
            e.printStackTrace();
        }

    }

service业务类实现方法:

@Override
    public void downloadUploadResut(HttpServletResponse response,Integer  uploadId) {
        ExcelWriter excelWriter = null;
        try {
            CustomCellWriteHandl
使用 EasyExcel 在一个 Excel 文件中写入多个 sheet 数据,可按以下步骤实现: 1. **引入依赖**:在项目中引入 Alibaba EasyExcel 依赖。以下是 Maven 依赖片段: ```xml <!-- alibaba excel依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.6</version> <exclusions> <exclusion> <artifactId>cglib</artifactId> <groupId>cglib</groupId> </exclusion> </exclusions> </dependency> ``` 2. **编写写入代码**:使用 `EasyExcel.write` 方法指定文件,注册样式等,然后通过循环为每个 sheet 构建 `WriteSheet` 对象并写入数据,最后调用 `excelWriter.finish()` 完成写入操作,以避免文件损坏。以下是示例代码: ```java import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.metadata.WriteSheet; import java.util.HashMap; import java.util.List; import java.util.Map; @SuppressWarnings("rawtypes") public class MultiSheetWriter { public static void writeMore(String fileName, Map<Class, List> map) { // 指定文件,自定义列宽,注册样式 ExcelWriter excelWriter = EasyExcel.write(fileName) .registerWriteHandler(new CustomCellWriteHandler()) .registerWriteHandler(createStyleStrategy()) .build(); int i = 0; for (Class c : map.keySet()) { WriteSheet writeSheet = EasyExcel.writerSheet(i++, c.getSimpleName()) .head(c) .build(); excelWriter.write(map.get(c), writeSheet); } // 这一步很关键,不然文件会损坏 excelWriter.finish(); } // 这里需要实现 createStyleStrategy 方法 private static Object createStyleStrategy() { // 实现样式策略的代码 return null; } // 这里需要实现 CustomCellWriteHandler 类 static class CustomCellWriteHandler { // 自定义单元格写入处理逻辑 } } ``` 使用示例: ```java import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { String fileName = "path/to/your/file.xlsx"; Map<Class, List> map = new HashMap<>(); // 示例数据 List<YourClass1> list1 = new ArrayList<>(); // 填充 list1 数据 map.put(YourClass1.class, list1); List<YourClass2> list2 = new ArrayList<>(); // 填充 list2 数据 map.put(YourClass2.class, list2); MultiSheetWriter.writeMore(fileName, map); } } ``` 在上述代码中,`YourClass1` 和 `YourClass2` 是对应 sheet 数据的实体类,需要根据实际情况进行定义。`CustomCellWriteHandler` 类和 `createStyleStrategy` 方法需要根据具体需求实现自定义的单元格写入处理逻辑和样式策略。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成伟平2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值