Java 基于Excel模板实现导出Excel并插入数据

2023-11-13

【本案例基于spring boot架构】

一、需求介绍

    给定一个Excel模板,在指定位置插入数据,然后将生成的excel导出。

 

二、实现方法介绍

    1、准备Excel模板

     模板中要插入数据的地方用“${...}"代替(其实就是占位符,与mybatis的sql语法占位符一样),

2、代码实现(可移植)

本案例用到的jar包依赖如下:

<dependency>
     <groupId>net.sf.jxls</groupId>
     <artifactId>jxls-core</artifactId>
     <version>1.0.3</version>
</dependency>

 

/**
     * 根据Excel模板导出Excel
     *
     * @param data:要放入Excel模板中的数据
     * @param response
     * @Param fileName:下载 的文件名(不带后缀)
     * @Param templete:模板名(带后缀)
     */
public static void exportExcelFromTemplete(String templeteName, String fileName, Map<String, Object> data, HttpServletResponse response) {

        String dir = System.getProperty("user.dir");
        String excelTempletePath = dir + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + "templates";

        response.reset();
        //设置下载文档格式
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xlsx");

        try {
            //创建临时导出文件
            File tempFile = File.createTempFile(fileName, ".xlsx");

            /**
             * 利用XLSTransform转到Excel
             */
            XLSTransformer transformer = new XLSTransformer();
            /**
             * templete:模板文件
             * tempFile.getAbsolutePath():临时文件的绝对地址
             */
            String templete = excelTempletePath + File.separator + templeteName;
            //开始转换到Excel,并写入数据(写入数据的核心代码)
            transformer.transformXLS(templete, data, tempFile.getAbsolutePath());

            BufferedOutputStream outputStream = null;
            BufferedInputStream inputStream = null;

            inputStream = new BufferedInputStream(new FileInputStream(tempFile));
            outputStream = new BufferedOutputStream(response.getOutputStream());
            byte[] buffer = new byte[inputStream.available() + 1024];
            int len = 0;
            while ((len = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, len);
            }

            outputStream.close();
            inputStream.close();
            /**
             * 下载完成删除临时文件
             */
            tempFile.delete();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        }

    }

说明:Map中的数据,其键(key)要和Excel表中要插入的数据${*}中的*一一对应。

如: 当像map中插入这条数据后,调用上面的方法,就可以生成自己需要的Excel。

本案例生成的Excel如下图所示:

ps:以上代码可以直接拷贝使用,只是要注意依赖包的导入不要忘记,如有报错,欢迎交流。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 基于Excel模板实现导出Excel并插入数据 的相关文章

随机推荐

  • 来认识并了解一下:不一样的杨氏矩阵

    对于杨氏矩阵 不知道大家了解多少 想必大家会一开始就认为是一个杨辉三角吧 其实这二者并没有什么关联 杨氏矩阵 顾名思义 就是一个矩阵 这儿是百度百科的搜索内容 杨氏矩阵 是对组合表示理论和舒伯特演算很有用的工具 它提供了一种方便的方式来描述
  • Java自学路线(超全超详细)—初学者零基础版Ⅱ

    Hello 欢迎回归 本期文章继续分析关于Java的自学路线 上期说到 Javaweb阶段的学习 让我们对于Java知识不停巩固沉淀 Java 一起大展拳脚吧 接下来 我们将进行新的阶段 spring框架全家桶 可能对于绝大部分初学者来说
  • vscode terminal设置

    sync gist 1e11137686ef7208ef3ef453e835c629 terminal integrated shell linux bin sh terminal integrated fontFamily monaco
  • Error tokenizing data. C error: Expected 1 fields in line 49, saw 2

    读取数据跳过某些错误行文本 skiprows list like int或callable 可选要跳过的行号 0索引 或要跳过的行数 整数 在文件的开头 如果可调用 则将根据行计算可调用函数索引 如果应跳过行 则返回True 否则返回Fal
  • 多线程java.util.concurrent.RejectedExecutionException

    项目运行一段时间后现场突然报了一个异常 多线程读取本地文件时失败导致文件大量积压 查看日志发现以下异常 java util concurrent RejectedExecutionException Task java util concu
  • 人工智能入门(一)----Anaconda的安装

    Anaconda的官网 Anaconda Individual Editionhttps www anaconda com download下载完 安装 第一个不选 安装完成后发现这些新的项目 其中Anaconda Navigator是An
  • Java异常处理——抛出异常&自定义异常&NullPointerException

    目录 小结 抛出异常 异常的传播 抛出异常 异常屏蔽 提问时贴出异常 自定义异常 NullPointerException 处理NullPointerException 定位NullPointerException 小结 调用printSt
  • chatgpt赋能python:制作简单动画:Python带你飞

    制作简单动画 Python带你飞 Python不只是一门编程语言 它还能制作简单的动画 Python用于动画的库 有很多种 包括turtle graphics py和pygame等等 本文将以turtle为例 介绍如何使用Python制作简
  • (文件上传upload) [极客大挑战 2019]Upload1 和 [ACTF2020新生赛]Upload1

    前言 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行 这里上传的文件可以是木马 病毒 恶意脚本或者WebShell等 由于程序员在对用户文件上传部分的控制不足或者处理缺陷 而导致用户可以越过其本身权限向服务器上传可执行的动态
  • Docker学习高级篇-重量级监控工具CIG

    目录 背景问题 1 Docker监控三剑客简介 CAdvisor InfluxDB Grafana Metrics Dashboard 2 Docker compose部署CIG 3 Grafana配置 背景问题 通过docker stat
  • L1、L2、smooth L1三类损失函数

    一 常见的MSE MAE损失函数 1 1 均方误差 平方损失 均方误差 MSE 是回归损失函数中最常用的误差 它是预测值与目标值之间差值的平方和 其公式如下所示 下图是均方根误差值的曲线分布 其中最小值为预测值为目标值的位置 优点 各点都连
  • 防火墙的目标地址转换和源地址转换

    遇到一起防火墙故障 对防火墙的工作原理和目标地址转换 源地址转换有了进一步的了解 记录于此 结果说在前面 网络结构非常简单 外网 防火墙 内网 内网中架有网站 在外网使用域名访问 内网中机器需要上外网 也需要用域名互访 在这种情况下 地址转
  • 熵最大定理 两种理解

    在信息论中 我们会关注一个信息源熵的大小 简单的说 熵表征了一个信源的不确定度 我们已经对下面这个定理烂熟于心 在所有定义在有限字符集上的随机符号中 熵最大发生在等概时 为H x logM M为符号个数 首先我们可以从直观上理解熵最大定理
  • FlatBuffer在JAVA下的使用

    早听说FatBuffer的大名 据说比Protobuffer效率还要高 出于当初对Protobuf良好的印象 FlatBuffer同样是Google出品 因此在一个项目中尝试使用了FlatBuffer IDL之类的描述语言 轻车熟路地过了
  • IntelliJ IDEA快速自动生成Junit测试类

    前言 之前在写业务逻辑的时候 都很少有写单元测试 因公司项目用的分布式架构 将整个系统抽成了很多微服务 测试一个接口 需要启动好几个服务 才能进行测试 并且有时候 我们只是改了一点代码 并不需要全部启动 太耗时 这个时候 就可以编写单元测试
  • 数字图像处理——图像锐化

    图像增强是图像处理的一个重要环节 早期的图像处理就是从图像增强开始的 人们研究对质量低的图像进行处理以获得改善质量后的图像 现今的图像增强还为后续的图像处理 如图像信息提取 图像识别等 提供更高识别度的图像 从图像处理技术来看 图像的摄取
  • 关于fiddler手机(APP)抓包时无法连接网络问题处理

    个人在新入职公司 想安装fiddler 尝试通过手机连接本地电脑访问服务器网络 然后再通过fidder在本地和与服务器之间抓取数据 之前也有在上家公司用过 但不知是网络认证的原因 还是这次下载的fidder自身的问题 当我将认证书传到手机端
  • ubuntu 下 screenfetch 的安装及使用

    ubuntu 下 screenfetch 的安装及使用 origin link https linux cn article 1947 1 html screenfetch 是一个CLI bash 脚本 用于在屏幕截图中显示系统 主题信息
  • 【数据库系统概论】第七章:数据库设计

    视频 参考 文章目录 概念设计 E R图 逻辑结构设计 把E R图转化为表 物理结构设计 概念设计 E R图 E R图 矩形 实体 椭圆 属性 菱形 联系 联系 两个实体之间的联系 1 1 一对一的联系 身份证和人民 1 N 一对多的联系
  • Java 基于Excel模板实现导出Excel并插入数据

    本案例基于spring boot架构 一 需求介绍 给定一个Excel模板 在指定位置插入数据 然后将生成的excel导出 二 实现方法介绍 1 准备Excel模板 模板中要插入数据的地方用 代替 其实就是占位符 与mybatis的sql语