轻松学会Java导出word,一篇文章就够了!

news2024/9/21 22:08:21

很多小伙伴在工作中,可能又这样一个需求:根据word模板去填充数据,变成我们想要的word文档,这是很多刚进入职场的小白都会碰到的需求。

当遇上这种需求,我们可以通过这篇文章要讲的poi-tl 来做处理。

导入依赖

    <dependency>
        <groupId>com.deepoove</groupId>
        <artifactId>poi-tl</artifactId>
        <version>1.5.1</version>
    </dependency>

填充文本

 首先,我们需要先准备一个word文档,必须是.docx结尾的哦。

我们先在指定的位置创建一个测试文档。我这边直接在springboot中的templates目录下创建一个名为test1.docx的文件。
在这里插入图片描述
在这里插入图片描述

 这里需要注意:对于文本数据而言,动态填充的数据,用{{}}包裹即可。
   //掌握如何填充文本类型数据
    @Test
    void contextLoads() throws IOException {
      String path="D:\\QQ_File\\1719036792\\FileRecv\\tuanfei\\src\\main\\resources\\templates\\test1.docx";
      //第一步:读取模板
        XWPFTemplate compile = XWPFTemplate.compile(path);
      //第二步:创建数据,用于把我们模板中的{{}}包裹的变量替换掉,map中保存的key一定要和模板中的变量保持一致
        HashMap<String, Object> map = new HashMap<>();
        map.put("date", LocalDate.now());
        compile.render(map);
        //第三步:把设置的参数写入,并生成新的word文档
        compile.writeToFile("D:\\QQ_File\\1719036792\\FileRecv\\tuanfei\\src\\main\\resources\\templates\\text.docx");
      compile.close();
    }

执行上面代码,会发现我们多了一个text.docx 的文档,打开看,发现数据已经被填充了。
在这里插入图片描述

填充图片

还是一样,我们创建一个用于填充数据的模板。不过对于文本而言,填充设置的参数需要用{{@}}来包含住。

我们先在指定的位置创建一个测试文档。我这边直接在springboot中的templates目录下创建一个名为imgTemplate.docx的文件。
在这里插入图片描述
imgTemplate文件打开是这样的:

在这里插入图片描述
当执行下面通过poi-tl实现的填充图片代码:

    @Test
    void  test2() throws IOException {
        String path="D:\\QQ_File\\1719036792\\FileRecv\\tuanfei\\src\\main\\resources\\templates\\imgTemplate.docx";
        //第一步:读取模板
        XWPFTemplate compile = XWPFTemplate.compile(path);
        //第二步:创建数据,用于把我们模板中的{{}}包裹的变量替换掉,map中保存的key一定要和模板中的变量保持一致
        HashMap<String, Object> map = new HashMap<>();
        //本地图片
        //120,120:代表设图片的长宽
        map.put("img1",new PictureRenderData(120,120,"D:\\QQ_File\\1719036792\\FileRecv\\tuanfei\\src\\main\\resources\\templates\\img.png"));
        //流图片
        map.put("img2",new PictureRenderData(120,120,".png",new FileInputStream("D:\\QQ_File\\1719036792\\FileRecv\\tuanfei\\src\\main\\resources\\templates\\img.png")));

        //网络图片
        map.put("img3", new PictureRenderData(100, 100, ".jpg", BytePictureUtils.getUrlBufferedImage("https://gss0.baidu.com/-vo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/314e251f95cad1c8ba1e530c7d3e6709c93d5177.jpg")));

        compile.render(map);
        compile.writeToFile("D:\\QQ_File\\1719036792\\FileRecv\\tuanfei\\src\\main\\resources\\templates\\Img.docx");
        compile.close();
    }

打开img.docx文件,发现图片已经被填充进去了
在这里插入图片描述

填充表格

  填充表格的时候,需要使用{{*var}}来填充表格。

还是一样,在指定的位置创建一个测试文档。我这边直接在springboot中的templates目录下创建一个名为TableTemplate.docx的文件。而文件中的内容为:
在这里插入图片描述

然后,编写测试方法,执行以下代码,进行表格的填充

    @Test
    public void test() throws IOException {
        String path="D:\\QQ_File\\1719036792\\FileRecv\\tuanfei\\src\\main\\resources\\templates\\tableTemplate.docx";
        //第一步:读取模板
        XWPFTemplate compile = XWPFTemplate.compile(path);
 //第二步:创建数据,用于把我们模板中的{{}}包裹的变量替换掉,map中保存的key一定要和模板中的变量保持一致
      HashMap<String, Object> map = new HashMap<>();
      //设置单元格,表头
        RowRenderData header = RowRenderData.build(new TextRenderData("6495ED", "姓名"), new TextRenderData("6495ED", "学历"));
      //设置表内容,如果在实际应用中,传入一个list集合或者数组,方可用foreach进行循环填充

        RowRenderData row0 = RowRenderData.build("张三", "研究生");
        RowRenderData row1 = RowRenderData.build(new TextRenderData("李四"), new TextRenderData("博士"));
        RowRenderData row2 = RowRenderData.build("王五", "博士后");

        map.put("table", new MiniTableRenderData(header, Arrays.asList(row0, row1, row2)));
        compile.render(map);
        compile.writeToFile("D:\\QQ_File\\1719036792\\FileRecv\\tuanfei\\src\\main\\resources\\templates\\table.docx");
        compile.close();
    }

执行成功后,在生成文件位置找到对应的文件,打开查看:
在这里插入图片描述
执行成功。。。。。

在实际开发中,我们经常会使用到Word的导出和数据填充。使用poi-tl,我们可以很轻松的就能对word文件进行操作。我写的这篇文章中只对我们常用的三种类型进行讲解。当我们需要更加了解和使用的时候,还是需要查看官方文档能更一步的了解和掌握poi-tl。

POI-TL1.5.x的文档地址:点击进入文档地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/740055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

下载pycharm专业版

PyCharm: the Python IDE for Professional Developers by JetBrainsThe Python & Django IDE with intelligent code completion, on-the-fly error checking, quick-fixes, and much more...https://www.jetbrains.com/pycharm/Pycharm安装使用与版本切换_pycharm专业版换…

华为开发者大会2023(Cloud)之旅

【摘要】 金鱼哥畅游记&#xff1a;华为开发者大会2023&#xff08;Cloud&#xff09; 2023年7月7日华为开发者大会2023&#xff08;Cloud&#xff09;在广东东莞正式揭开帷幕&#xff0c;金鱼哥很庆幸能有机会参加此次盛大聚会&#xff0c;看到众开发者共聚一堂&#xff0c;在…

812. 打印数字

链接&#xff1a; 812. 打印数字 - AcWing题库 题目&#xff1a; 输入一个长度为 nn 的数组 aa 和一个整数 sizesize&#xff0c;请你编写一个函数, void print(int a[], int size), 打印数组 aa 中的前 sizesize 个数。 输入格式 第一行包含两个整数 nn 和 sizesize。 第二行包…

MySQL (select查询的基本用法及select相关练习)

如图插入数据&#xff1a; 得 1、显示所有职工的基本信息。 mysql> select * from worker;效果如图&#xff1a; 2、查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号 mysql> select distinct 部门号 from worker;效果如图&#xff1a; 3、求出所有职…

痴呆≠阿尔茨海默病?5个特征或是发生痴呆!

痴呆是一种智力退化的综合症&#xff0c;其特点包括记忆力减退、思维能力下降、判断力和语言能力受损等。然而&#xff0c;很多人错误地将痴呆等同于阿尔茨海默病。事实上&#xff0c;阿尔茨海默病只是痴呆症的一种常见类型。下面将介绍痴呆的五个主要特征以及导致痴呆的原因。…

基于Java+SpringBoot+Vue的开放实验管理系统设计与实现

博主介绍&#xff1a;✌擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案…

找回存储在DBeaver连接中的数据库密码

一、拿到 credentials-config.json 文件 1、打开 Dbeaver 后&#xff0c;点击 “窗口 — 首选项” 2、找到worksapce path 3、进入 workspace path 的文件夹&#xff0c;再进入到 \General.dbeaver 文件夹&#xff0c;找到文件 credentials-config.json &#xff08;可以备…

数据结构初阶--排序1

目录 前言冒泡排序思路代码实现 选择排序思路代码实现 插入排序思路代码实现 希尔排序思路代码实现 堆排序思路向上调整建堆向下调整建堆 代码实现 前言 排序在我们的日常生活中无处不在&#xff0c;比如对若干个学生的期末成绩&#xff0c;可以依据姓氏&#xff0c;学号&…

交易成本模型与Python技术共同促进高频交易的发展走向

高频交易是一种在金融市场中越来越受到关注的交易方式&#xff0c;其具有快速、高效、低风险的特点&#xff0c;可以为投资者带来丰厚的利润。然而&#xff0c;在高频交易中&#xff0c;交易成本往往占据了很大的比例&#xff0c;可以说是一个非常重要的因素。因此&#xff0c;…

辅助驾驶功能开发-功能规范篇(22)-1-L2级辅助驾驶方案功能规范

1. 系统概览 System Overview 1.1 系统架构 各模块描述如下: ADSADS控制器,包括5R1V感知融合算法模块、level0-level2相关功能、控制决策模块、响应执行模块。EPBi制动执行机构,包括主制动和冗余制动,可实现行车和驻车控制。EPS转向执行机构,TJP包含冗余转向,L-TJP不包含…

DynaSLAM代码详解(3) — MaskNet.cc加载Mask R-CNN网络部分

目录 3.1 Mask R-CNN运行 3.2 SegmentDynObject::SegmentDynObject() 3.3 SegmentDynObject::GetSegmentation() 3.1 Mask R-CNN运行 在Examples/RGB-D/rgbd_tum.cc文件开始运行Mask R-CNN网络&#xff0c;首先进入MaskNet->GetSegmentation函数。 // Segment out the i…

使用Dockerfile创建nginx+php镜像,采用分层

什么是Dockerfile Dockerfile是一种能被Docker程序解释的脚本&#xff0c;它是由一条条的命令所组成&#xff0c;每条命令对应Linux下面的一条命令&#xff0c;Docker程序将这些Dockerfile命令翻译成真正的Linux命令 Dockerfile命令 Dockerfile通常会包含如下命令&#xff1a…

【AGC】认证服务HarmonyOS(api9)实现手机号码认证登录

【问题背景】 近期AGC上线了HarmonyOS(api9)平台的SDK&#xff0c;这样api9的设备也能使用认证服务进行快速认证登录了。下面为大家带来如何使用auth SDK&#xff08;api9&#xff09;实现手机号码认证登录。 【开通服务】 1.登录AppGallery Connect&#xff0c;点击“我的项…

lc202306

785. 判断二分图 对于单个连通图&#xff1a;一个dfs判断图中所有节点符合二分。 遍历节点列表>遍历所有连通图。 133. clone graph 994. rotting oranges 力扣 维护一个time表&#xff0c;表示所有orange rot的最快时间。对每一个 t0 就 rot 的 orange dfs&#xff0c;遇…

无法从gcr.io获取distroless镜像问题

当我们能够访问外网&#xff0c;且能够ping通gcr.io网站后&#xff0c;依旧无法拉取distroless镜像时&#xff0c;可以通过以下网站作为中转获取。 rootacoinfo-Vostro-3667:/home/xxx/xx# docker pull gcr.io/distroless/base-debian11 Using default tag: latest Error resp…

快速制作优惠券信息展示小程序教程

要想拥有一个拥有优惠券功能的小程序商城&#xff0c;首先我们需要搭建一个小程序。以乔拓云第三方平台为例&#xff0c;我们可以通过以下步骤来完成。 首先&#xff0c;登录乔拓云平台&#xff0c;进入【乔拓云】后台管理页面。乔拓云功能强大&#xff0c;不仅可以搭建小程序…

运维开发面试题第五期(华电天益)

1、一个目录(没有子目录)有很多文件&#xff0c;想最快速度查看到最近更新的文件你有几种方式实现?请写出一种或几种 ls -lrt 目录 R 逆序 l 长格式 t 按更新时间排序2、使用 tar 命令打包/etc 目录下的所有文件(包括子文件夹) tar -cvf 打包路径加名字 /etc/ 仅打包…

[gtp]购物车案例参考

react hooks,购物车案例. 在列表上点击或者-更新数量,调用接口更新单个价格. 点击table的checkbox勾选后,计算总价? 对于React Hooks和购物车案例&#xff0c;您可以使用useState来管理列表中商品的数量和总价。当点击"“或”-"按钮时&#xff0c;可以更新相应商品…

网络营销的定义、实现方式、关键要素和应用案例

网络营销是通过互联网及相关技术手段来实现企业品牌推广、产品销售、客户维护等目标的营销方式。近年来&#xff0c;随着互联网技术的飞速发展&#xff0c;网络营销已成为企业推广、销售和宣传的重要手段。本文将从网络营销的定义、实现方式、关键要素和应用案例等方面&#xf…

【ECharts系列】ECharts 图表渲染问题解决方案

1 问题描述 echats 渲染&#xff0c;第一次的时候只出现Y轴数值&#xff0c;不出现X轴数值&#xff0c;切换下页面&#xff0c;X轴数值就能出现。 2 原因分析 如果在使用ECharts渲染时&#xff0c;X轴数值只在切换页面后才出现&#xff0c;可能是因为ECharts在初始化时没有正确…