EasyExcel3.0.5 导出多个sheet,批量下载打包成ZIP压缩包

这篇博客介绍了如何使用EasyExcel3.0.5实现导出多个sheet,并将它们批量下载打包成ZIP压缩包。作者在解决图片导出和附件下载问题中遇到了URL解析和本地保存路径的挑战,通过代码实现了解决方案,提供了源码链接供读者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近浏览语雀社区官网,里面有一篇 easyexcel 里面 图片导出,对此,我产生了浓厚兴趣。恰巧公司有这么一个BT 需求,但是作为有追求的人,图片放在 excel 单元格是不是太不美观了,万一图片很大,那不是奇丑无比了! 有没有什么办法让图片下载到指定的本地文件路径,这样excel 既美观,又不影响图片查看。

上一次写了一篇: EasyExcel3.0.5导出多个sheet,含查询优化,竟然无人问津,这篇写的非常完整,既实现了多个 sheet 导出,也实现了附件下载。但是批量下载附件有几个问题点

  • 附件地址解析的局限性。我是存储在 OSS,OSS 返回的路径可以用流直接下载,但是如果有人不用OSS 呢,五花八门的附件 URL 防不胜防,就会导致解析出错!例如遇到下面的 URL 地址,该怎么玩?现实中就有!
https://label1.cmscentertech.com/Label/Print?coNumber=NC2022040700374618&type=MainLabel&childForecastNumber=YT2203721272081883-1&labelformat=PDF

http://yunexpress-fileupload.oss-cn-shenzhen.aliyuncs.com/eddfbbe9c142456f9984d706e10a01e4.Jpeg
  • 保存附件地址的问题。创建一个本地文件目录,貌似好像没啥毛病,但是上线部署到服务器的时候,却不能下载到本地了,因为服务器上没有 D盘、C盘,而且只会在服务器创建个目录,egg pain 吗?如下图,服务器上产生了目录并没有下载到你的本地目录。
    在这里插入图片描述

好了,遇到问题解决问题,才能帮助自己成长。话不多说,开干!

源码

链接:https://pan.baidu.com/s/1q7s6JisKKJ-F_ffN6Uifhg?pwd=1234
提取码:1234

代码实现

为了让读者可以轻松读懂读通,并可以参照实现,还是贴完整一点。

Controller

package cn.com.easyExcel.controller;

import cn.com.easyExcel.param.OrderExportParam;
import cn.com.easyExcel.service.OrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Api(tags = "订单表")
@RestController
@RequestMapping(value = "/order")
public class OrderController {
   
    @Autowired
    private OrderService orderService;

    @ApiOperation(value = "多sheet导出并下载附件")
    @PostMapping(value = "moreSheetAndDownloadUrlFile")
    public void moreSheetAndDownloadUrlFile(HttpServletRequest request,
                                            HttpServletResponse response,
                                            OrderExportParam param){
   
        orderService.moreSheetAndDownloadUrlFile(request, response, param);
    }
}

接口类

package cn.com.easyExcel.service;

import cn.com.easyExcel.param.OrderExportParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public interface OrderService {
   
    /**
     * 多sheet导出并且下载附件
     */
    void moreSheetAndDownloadUrlFile(HttpServletRequest request, HttpServletResponse response, OrderExportParam param);
}

实现类 (重中之重)

package cn.com.easyExcel.service.impl;

import cn.com.easyExcel.enums.InvoiceTypeEnum;
import cn.com.easyExcel.enums.SourceTypeEnum;
import cn.com.easyExcel.excel.listener.ExportListener;
import cn.com.easyExcel.mapper.OrderDetailMapper;
import cn.com.easyExcel.mapper.OrderMapper;
import cn.com.easyExcel.param.OrderExportParam;
import cn.com.easyExcel.pojo.Order;
import cn.com.easyExcel.pojo.OrderDetail;
import cn.com.easyExcel.pojo.OrderImage;
import cn.com.easyExcel.service.OrderService;
import cn.com.easyExcel.util.InitDataUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.tomcat.util.http.fileupload.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值