EasyExcel的简单导出

2023-11-06

EasyExcel的简单导出

Controller层代码
@GetMapping("/download")
public void download(String name, HttpServletResponse response) {
    fileManager.download(name, response);
}
Service处理代码
public void download(String name, HttpServletResponse response) {
        try {
            String template_path = "E://template//模板文件.xlsx";
            if (!new File(template_path).exists()) {
                String message = "模板文件不存在,路径:" + template_path;
                log.error(message);
                throw new XException(message);
            }
            String strFileName = String.format("%s_导出文件.xlsx", name);

            //获取数据字段数据【这个根据自己需要获取到对应的数据,自己实现此方法】
            List<SysColDto> sysColDtos = getData();

            //构建填充excel单元格数据【需要将获取到的转换成SysColExcelDto(代码见后面),这个实体类见后面】
            List<SysColExcelDto> list = new ArrayList<>();
            for (SysColDto sysColDto : sysColDtos) {
                SysColExcelDto sysColExcelDto = new SysColExcelDto();
                sysColExcelDto.setModname(sysColDto.getModname());
                sysColExcelDto.setLname(sysColDto.getLname());
                sysColExcelDto.setCname(sysColDto.getCname());
                list.add(sysColExcelDto);
            }
            //自定义行风格handler【笔者这边用了一个自定义行风格handler(代码见后面),是为了实现框线,看每个人的需求决定使不使用】
            CustomRowStyleHandler customRowStyleHandler = new CustomRowStyleHandler(1, 9);
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            // 这里URLEncoder.encode可以防止中文乱码
            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
            response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", new String(strFileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1)));
            //填充excel【easyExcel提供了多种生成excel的方式,这边使用的是根据模板来填充模板中的数据doFill,模板中数据填充位置需要参考:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/fill】
            EasyExcel.write(response.getOutputStream())
                    .registerWriteHandler(customRowStyleHandler)
                    .withTemplate(template_path)
                    .sheet()
                    .doFill(list);
        } catch (IOException ex) {
            throw new XException(ex.getMessage());
        }
    }
SysColExcelDto.java类
  • 这是使用easyExcel提供的注解来标记字段填充行数,这种情况适用于自动生成,如果是填充excel(doFill方式)可以不用ExcelProperty注解标识,但是需要在模板中标记数据填充位置
  • 模板标记数据填充位置标记如下,name和number对应的excel对象的字段名,自行修改即可
    在这里插入图片描述
/**
 * 书签导入excel对象
 */
@Data
public class SysColExcelDto {

    @ExcelProperty("对应信息采集组")
    private String modname;

    @ExcelProperty("对应采集栏目名称")
    private String lname;

    @ExcelProperty("对应系统中文字段")
    private String cname;
}
CustomRowStyleHandler.java
  • 这是自定义行风格处理器,是因为某些情况下需要加格式,看需求
  • 除了RowWriteHandler 可以实现,还有CellWriteHandler可以实现,顾名思义是处理单元格
/**
 * excel自定义行风格处理器
 */
public class CustomRowStyleHandler implements RowWriteHandler {

    //单元格起始下标
    private Integer cellIndexStart;

    //单元格结束下标
    private Integer cellIndexEnd;

    public CustomRowStyleHandler(Integer cellIndexStart, Integer cellIndexEnd) {
        this.cellIndexStart = cellIndexStart;
        this.cellIndexEnd = cellIndexEnd;
    }

    public CustomRowStyleHandler() {
    }

    @Override
    public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {
        Sheet sheet = writeSheetHolder.getSheet();
        Workbook workbook = sheet.getWorkbook();
        CellStyle cellStyle = workbook.createCellStyle();
        //设置边框样式
        cellStyle.setBorderLeft(BorderStyle.THIN);//细实线
        cellStyle.setBorderTop(BorderStyle.THIN);
        cellStyle.setBorderRight(BorderStyle.THIN);
        cellStyle.setBorderBottom(BorderStyle.THIN);
        for (Integer i = cellIndexStart; i <= cellIndexEnd; i++) {
            Cell cell = row.getCell(i);
            cell.setCellStyle(cellStyle);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EasyExcel的简单导出 的相关文章

随机推荐

  • 二叉树叶子节点数和度为2的节点数

    我们设度为0 1 2的节点分别为n0 n1 n2个 那么节点总数n n0 n1 n2 然而边数b n 1 并且b n1 2 n2 n 1 n0 n1 n2 1 由此式我们可以推出n0 n2 1 也就是说叶子节点要比度为二的节点多一个 转载于
  • 总结 运行Scrapy项目结果出错:KeyError: ‘Spider not found:

    1 命令行窗口的当前路径不在scrapy工程目录中 需要先进入scrapy工程目录 不一定要工程根目录 下一级子目录也可以 2 执行命令 scrapy crawl fileName 时 不要加 py后缀 本人就是加了后缀 一直错误 正确 s
  • ChromeOS 体验

    概述 作为一名开发人员 一直关注各种桌面级 移动级操作系统的进展 其中就包含 ChromeOS 对于一个开发者 客户端 嵌入式 硬件开发者除外 而言 对于操作系统的要求如下 流畅 稳定而现代化的系统 UI 完整的 Linux 环境 好用的浏
  • C#get和set

    这里写目录标题 为什么要使用get和set 使用get访问私有变量 使用set和get定义一个索引器 为什么要使用get和set 因为在代码中存在着私有的值 我们不能在它的私有域外调用这些私有值 若要访问这些私有值 则需要使用get和set
  • Python,OpenCV图像金字塔cv2.pyrUp(), cv2.pyrDown()

    Python OpenCV图像金字塔cv2 pyrUp cv2 pyrDown 1 效果图 2 原理 2 1 什么是图像金字塔 2 2 金字塔分类 2 3 应用 3 源码 参考 这篇博客将介绍图像金字塔的理论 及用图像金字塔cv2 pyrU
  • vscode快捷键创建多个html标签

    vscode快捷键创建多个html标签 vscode中输入命令 按下Tab键 Tab键 没反应解决办法 参考地址 https blog csdn net xingyun piaofu article details 131879072 sp
  • 前端福利:使用Wallpaper Engine让自己的桌面炫酷起来

    Wallpaper Engine 是一款Steam上的特别特别炫酷的壁纸定制软件 它可以对你的桌面进行定制 可以使用视频 动画 网页等形式来替换壁纸 注意到没 关键是可以使用Html格式的文件作为桌面 前端福利啊有木有 首先 先先下载软件下
  • QT结合Mupdf实现预览pdf

    要在Qt中结合MuPDF库预览PDF文件 你可以按照以下步骤进行操作 1 下载并安装MuPDF库 首先 你需要从MuPDF的官方网站或代码托管网站上下载MuPDF库的源代码 并按照文档中的说明进行安装 确保你已经安装了所有必需的依赖项 2
  • 因果推断综述-A Survey on Causal Inference

    最近读到一篇讲述很全面的综述文献 A Survey on Causal Inference 对于接触因果推断不久的同学而言是特别详细的介绍和科普 文献很长 我会分成几部分介绍 目录 摘要 第一部分 简介 第二部分 因果推断基础知识 第三部分
  • java(有关类成员变量的访问权限)

    private public protected 默认不写 firendly 1 Class类的访问权限 public 可以供所有的类访问 默认 默认可以称为friendly但是 java语言中是没有friendly这个修饰符的 这样称呼应
  • Linux 编写定时任务

    1 先进入根目录 mkdir p home wangwenjun scripts cd home wangwenjun scripts 2 编写第一个shell文件 test sh vim test sh bin sh now date Y
  • Windows下Git-preview中文乱码的解决方法

    在Windows下安装Git preview 1 7 4后 使用中发现许多的乱码问题 感觉甚是不便 这是因为Git是在linux下开发的管理软件 而linux的编码方式是基于UTF 8的 所以移植到Windows之后难免会存在编码方式不同的
  • android wear 微信语音,moto 360手表语音回复微信教程

    moto360智能手表是一款搭载android系统的智能手表 目前微信已经添加了对智能手表的支持 不过很多玩家对于怎么使用moto 360语音回复微信还不是很清楚 下面小编就为大家分享一下moto 360语音回复微信教程 moto 360语
  • 最大权闭合子图(最小割)

    最大权闭合子图 最大流最小割 参考资料 1 最大权闭合子图 权闭合子图 存在一个图的子图 使得子图中的所有点出度指向的点依旧在这个子图内 则此子图是闭合子图 在这个图中有8个闭合子图 3 4 2 4 3 4 1 3 4 2 3 4 1 2
  • Qt绘图QGraphicsView、QGraphicsScene、QGraphicsItem简述

    Qt绘图中 QGraphicsView QGraphicsScene QGraphicsItem三者之间密不可分 以下简单介绍三者之间关系 三者之间关系 如同绘画的过程 Qt绘图中 QGraphicsView的作用相当于画板 QGraphi
  • linux 使用笔记

    1 查看使用的所有端口 netstat ntlp 2 查找文件路径 locate 文件名 如 find 文件名 如 find home 3 Linux下查看和停止所有java进程 在Linux下查看所有java进程命令 ps ef grep
  • 摄像机跟踪主角第三人称的视角

    using UnityEngine using System Collections public class FollowFarget MonoBehaviour public Transform PlayerTransfrom 定义一个
  • Unity 性能优化五:渲染模块压力

    CPU压力 Batching 在GPU渲染前 CPU会把数据按batch发送给GPU 每发送一次 都是一个drawcall GPU在渲染每个batch的时候 会切换渲染状态 这里的渲染状态指的是 影响对象在屏幕上的外观的渲染属性或材质 比如
  • OpenCV自适应阈值化函数adaptiveThreshold

    图像阈值化的一般目的是从灰度图像中分享目标区域和背景区域 然而仅仅通过设定固定阈值很难达到理想的分割效果 在实际应用中 我们可以通过某个像素的邻域以某种方法确定这个像素应该具有的阈值 进而保证图像中各个像素的阈值会随着周期围邻域块的变化而变
  • EasyExcel的简单导出

    EasyExcel的简单导出 Controller层代码 GetMapping download public void download String name HttpServletResponse response fileManag