当前位置: 首页 > news >正文

解决java使用easyexcel填充模版后,高度不一致问题

自定义工具,可以通过获取上一行行高设置后面所以行的高度

package org.springblade.modules.api.utils;

import com.alibaba.excel.write.handler.RowWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.Row;

public class CustomRowHeightHandler implements RowWriteHandler {

    private int rowHeight;

    public CustomRowHeightHandler(int rowHeight) {
        this.rowHeight = rowHeight;
    }

    @Override
    public void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Integer integer, Integer integer1, Boolean aBoolean) {

    }

    @Override
    public void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {

        row.setHeight((short)rowHeight);
    }

    @Override
    public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer integer, Boolean aBoolean) {

    }
}

导出的代码

/**
     * excel填充模版用
     *
     * @param response         响应
     * @param templateFilePath 模版路径
     * @param inputFileName    导出文件名
     * @param List             数据列表
     * @param map              单个对象
     * @param sheetAt          第几个sheet
     * @param row              获取第几行的高度
     * @throws Exception
     */
    public static void exportExcelByFillIn(HttpServletResponse response, String templateFilePath, String inputFileName,
                                           List<?> List, Map<String, Object> map, Integer sheetAt, Integer row) throws Exception {
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileNamePath = URLEncoder.encode(inputFileName, "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileNamePath + ".xlsx");
       
        int rowHeight = getFourthRowHeightFromTemplate(templateFilePath, sheetAt, row);
        InputStream is = getInputStream(templateFilePath);
        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(is)
                //从指定行后使设置行高
                .registerWriteHandler(new CustomRowHeightHandler(rowHeight))
                .excelType(ExcelTypeEnum.XLS)
                .build();
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        // 填充列表数据
        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
        excelWriter.fill(List, fillConfig, writeSheet);
        // 填充map中的变量
        excelWriter.fill(map, writeSheet);
        excelWriter.finish();

    }

    /**
     * 获取上一行高度
     *
     * @param templateFilePath
     * @param sheetAt
     * @param row
     * @return
     * @throws Exception
     */
    public static int getFourthRowHeightFromTemplate(String templateFilePath, Integer sheetAt, Integer row) throws Exception {
        InputStream is = getInputStream(templateFilePath);
        Workbook workbook = WorkbookFactory.create(is);
        Sheet sheet = workbook.getSheetAt(sheetAt); // 第几个工作表
        Row fourthRow = sheet.getRow(row); // 第几行(索引从0开始)
        int rowHeight = fourthRow.getHeight();
        workbook.close();
        return rowHeight;
    }

    /**
     * 获取流
     *
     * @param templateFilePath
     * @return
     * @throws Exception
     */
    public static InputStream getInputStream(String templateFilePath) throws Exception {
        ClassPathResource res = new ClassPathResource(templateFilePath);
        InputStream is = res.getInputStream();
        return is;
    }

相关文章:

  • 【人工智能】DeepSeek 的上下文窗口扩展:解锁长文本处理的理论与实践
  • 【力扣hot100题】(088)最长有效括号
  • VS Code 的 .S 汇编文件里面的注释不显示绿色
  • 在spark中,窄依赖算子map和filter会组合为一个stage,这种情况下,map和filter是在一个task内进行的吗?
  • 玄机靶场-webshell查杀WP
  • viewmodel协程中执行耗时操作,导致viewmodel创建两次,导致observer失效
  • Linux 网络基础知识总结
  • 供应S620 支持 PD 的多协议双向快充移动电源解决方案
  • 保护PCBA的不同方法:喷三防漆 vs 镀膜
  • Ajax------免刷新地前后端交互
  • 力扣DAY46-50 | 热100 | 二叉树:展开为链表、pre+inorder构建、路径总和、最近公共祖先、最大路径和
  • 英伟达开源253B语言模型:Llama-3.1-Nemotron-Ultra-253B-v1 模型情况
  • #Hash 模式 vs History 模式
  • MCP基础学习四:MCP在AI应用中的集成(MCP在AI应用中的完整架构图)
  • 备赛蓝桥杯-Python-考前突击
  • EPLAN许可证更新教程
  • FTPClient开发遇到的坑
  • 新手宝塔部署thinkphp一步到位
  • 两个有序序列合并算法分析
  • MySQL数据库编程总结
  • 中国建设银行青海省分行网站/b站广告投放平台入口
  • 淘宝联盟推广做网站违法/郑州seo代理外包公司
  • 一个人可以建设几个网站/网络推广怎么做
  • 上海设计网站建设/seo外链
  • 网站用的横幅广告怎么做/内部优化
  • 日本门户网站有哪些/百度联盟广告