EasyExcel修改模板sheet的名称(解决EasyExcel第一个sheet名称无法修改bug)

easyexcel依赖

"<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.6</version>
</dependency>

xml"
"自定义拦截器
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;

/**
 * 自定义模板导出sheet拦截器
 */
public class CustomTemplateSheetStrategy implements SheetWriteHandler {

    private Integer sheetNo;

    private String sheetName;

    public CustomTemplateSheetStrategy(String sheetName) {
        this.sheetName = sheetName;
    }

    public CustomTemplateSheetStrategy(Integer sheetNo, String sheetName) {
        this.sheetNo = sheetNo;
        this.sheetName = sheetName;
    }

    @Override
    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
    }

    /**
     * 功能:动态修改模板中sheet的名称
     * sheet创建完成后调用
     * @param writeWorkbookHolder
     * @param writeSheetHolder
     */
    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        if (sheetName == null) {
            return;
        }
        if (sheetNo == null) {
            sheetNo = 0;
        }
        writeWorkbookHolder.getCachedWorkbook().setSheetName(sheetNo, sheetName);
    }
}

java"

----说明----

使用模板导出时,要使用cachedWorkbook,而不是workbook

### EasyExcel 导出 Excel 文件后无法打开的原因及解决方案 #### 1. 版本兼容性问题 确保使用的 `easyexcel` 库版本是最新的稳定版。较低版本可能存在未修复的 bug 或缺少某些重要注解,这可能导致导出文件不兼容或损坏[^1]。 ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency> ``` #### 2. 前端 Mock 数据干扰 如果前端在测试环境中使用了 mock 数据,这些数据可能会被错误地包含在实际请求中,从而导致生成的 Excel 文件出现问题。建议清除所有不必要的 mock 数据并重新部署前后端服务[^3]。 #### 3. 文件流处理不当 当通过 Web 接口导出 Excel 文件时,服务器应正确设置响应头以指示浏览器下载而非显示内容。此外,还需确保整个文件流传输过程中不会被打断或篡改。对于 Spring Boot 项目来说,可以参考如下代码片段来实现安全可靠的文件导出逻辑: ```java @RequestMapping("/export") public void export(HttpServletResponse response) throws IOException { // 设置响应头 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("example", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); // 创建工作簿对象 EasyExcel.write(response.getOutputStream(), DemoData.class).sheet("模板").doWrite(data()); } ``` #### 4. 并发访问控制 多线程环境下频繁读取/写入同一份 Excel 文件也可能引发冲突,进而破坏文件结构使其不可用。因此,在设计应用程序时要考虑并发场景下的资源管理策略,必要时加锁保护共享资源的操作。 #### 5. 检查日志信息 仔细查看应用的日志输出,特别是发生异常时捕获到的具体错误提示。很多时候,详细的堆栈跟踪可以帮助快速定位根本原因所在。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值