我的编程空间,编程开发者的网络收藏夹
学习永远不晚

poi-tl的使用(最全详解)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

poi-tl的使用(最全详解)

官网地址

概述

poi-tl,简单的说,就是通过一些标记,如{{text}},{{@image}}等,放到你指定的word模板里,然后去读取替换这些值,再输出填充数据后的word,可以做生成报表的功能

一、引入pom

              com.deepoove            poi-tl            1.10.0        

注意apache.poi版本要对应

             org.apache.poi            poi            4.1.2                            org.apache.poi            poi-ooxml            4.1.2                            org.apache.poi            poi-ooxml-schemas            4.1.2        

二、准备工作

在D盘,自己创建两个文件夹,一个是用来存储模板文件,另一个是用来存储生成的文件
我这里是在D盘
D:\data\template 存放模板
D:\data\word 存放生成的文件

三、案例走起

案例一 :普通文本及图片的渲染

1.准备一个word模板,命名为test1.docx,放到D:\data\template 下

注意,{{}}是官方指定的格式,可以查看官网,当然也可以自定义,这个后面来讲
在这里插入图片描述

2.编写生成代码
    @PostMapping(value = "/testdoc01")    public void Tx01() throws IOException {        //存放要填充的数据        Map<String, Object> datas = new HashMap<String, Object>();        //模板地址        String templateFilePath = "d:/data/template/";        //生成文件的保存地址        String destFilePath = "d:/data/template/word";                //文字 这里介绍两种数据填充方式        //1.可以设置一些通用样式        Style style = Style.builder().buildUnderlineColor("00FF00").buildFontSize(18).buildColor("00FF00").build();        datas.put("var1", Texts.of("内容1").style(style).create());        datas.put("var2", Texts.of("超链接").link("http://deepoove.com").style(style).create());        //2.文字可以通过Texts创建,也可以使用对象new TextRenderData("000000", "Sayi")        datas.put("var3",new TextRenderData("000000", "内容3"));                //图片        datas.put("image", Pictures.ofUrl("http://deepoove.com/images/icecream.png")                .size(100, 100).create());       //渲染文件        XWPFTemplate compile = XWPFTemplate.compile(templateFilePath + "test1.docx");        compile.render(datas);        //输出为文件,指定输出文件名        compile.writeToFile(destFilePath+"out_test01.docx");    }

3.调用后,查看生成的文件

在这里插入图片描述
在这里插入图片描述

案例二:表格的渲染,表格合并

1.准备一个word模板,命名为test2.docx,放到D:\data\template 下

在这里插入图片描述

2.编写生成代码
  @PostMapping(value = "/Tx02")    public void Tx02() throws IOException {        //存放要填充的数据        Map<String, Object> datas = new HashMap<String, Object>();           //模板地址        String templateFilePath = "d:/data/template/";        //生成文件的保存地址        String destFilePath = "d:/data/template/word";        //RowRenderData就是指定每一行数据的,可以去官网查阅,这里相当于设置了三行,row0就是表头,row1,row2是表内容        RowRenderData row0 = Rows.of("姓名", "学历").textColor("FFFFFF")                .bgColor("4472C4").center().create();        RowRenderData row1 = Rows.create("李四", "博士");        RowRenderData row2 = Rows.create("李四", "博士");        datas.put("var1", Tables.create(row0, row1,row2));        //合并单元格        RowRenderData roW0 = Rows.of("列0", "列1", "列2", "列3").center().bgColor("4472C4").textColor("7F7f7F").textFontFamily("Hei").textFontSize(15).create();        RowRenderData roW1 = Rows.create("没有数据", null, null, null);//第一行        //合并第几行第几列 到 第几行第几列        MergeCellRule rule = MergeCellRule.builder().map(MergeCellRule.Grid.of(1, 0), MergeCellRule.Grid.of(1, 2)).build();        datas.put("var2", Tables.of(roW0, roW1).mergeRule(rule).create());             //渲染文件        XWPFTemplate compile = XWPFTemplate.compile(templateFilePath + "test2.docx");        compile.render(datas);        //输出为文件,指定输出文件名        compile.writeToFile(destFilePath+"out_test2.docx");    }

3.调用后,查看生成的文件

在这里插入图片描述

案例三:动态表格的生成

1.准备一个word模板,命名为test3.docx,放到D:\data\template 下

在这里插入图片描述

2.编写生成代码
        //模板地址        String templateFilePath = "d:/data/template/";        //生成文件的保存地址        String destFilePath = "d:/data/template/word"; Map<String, Object> datas = new HashMap<String, Object>();          Student student1 = new Student();        student1.setAge("12");        student1.setIndex("1");        student1.setName("张三");        student1.setSex("男");        Student student2 = new Student();        student2.setAge("122");        student2.setIndex("11");        student2.setName("张三1");        student2.setSex("男1");        List<Student> studentList = List.of(student1,student2);        datas.put("lists",studentList);// 插件列表,可以去官网查看,有列循环,还有行循环,这里是行循环实例        LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();                //这里可以指定一个config类,用来指定一些规则,也可以改变模板中{{}}的这种格式        Configure config = Configure.builder()                .bind("lists", policy).build();                        XWPFTemplate compile = XWPFTemplate.compile(templateFilePath + "test3.docx",config);        compile.render(datas);        compile.writeToFile(destFilePath+"out_test3.docx");

3.调用后,查看生成的文件

在这里插入图片描述

案例四:结构体的应用

简述:结构体的应用,说白了,就是指定模板中的某一块内容,然后通过多个map,可以对这一块进行渲染,也就渲染出了多个这块的内容

1.准备一个word模板,命名为test4.docx,放到D:\data\template 下

在这里插入图片描述

2.编写生成代码
  @PostMapping(value = "/Tx03")    public void Tx03() throws IOException {        //模板地址        String templateFilePath = "d:/data/template/";        //生成文件的保存地址        String destFilePath = "d:/data/template/word";        Map<String,Object> map = new HashMap<>();        Map<String,Object> map1 = new HashMap<>(){            {                put("tex1","hhhhh11");            }        };        Map<String,Object> map2 = new HashMap<>(){            {                put("tex1","hhhhh22");            }        };        List<Map<String,Object>> maps = Arrays.asList(map1,map2);        map.put("tests",maps);        map.put("tex2","哈哈");        ConfigureBuilder builder = Configure.builder();        XWPFTemplate compile = XWPFTemplate.compile(templateFilePath + "test4.docx",builder.build());        compile.render(map);        compile.writeToFile(destFilePath+"out_test4.docx");    }

3.调用后,查看生成的文件

在这里插入图片描述
以上就是一些简单的例子了,上面都是输出的文件,当然也可以已流的形式输出,用于文件下载
只需要修改一个地方

在这里插入图片描述

五、结构体应用升级版,使用对象作为数据源

准备一个word模板,命名为test4.docx,放到D:\data\template 下
在这里插入图片描述

在这里插入图片描述

2.编写生成代码

渲染的对象

@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic class WarningData {    private List<ExperienceData> experiences;}
@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic class ExperienceData {    private String title;    private String error;//渲染图片的对象    private PictureRenderData pictureRenderData;}

这里就是封装的传入参数,warningData就是上面的对象

    default void generateWordStream(ServletOutputStream outputStream, String templateFilePath, Object WarningData ) throws IOException {        File file = new File(templateFilePath);        if(!file.isFile())            throw new BizException(CodeMsg.FILE_NOT_EXIST_ERROR.fillArgs("模板文件不存在!"+file.isFile()+"  "+templateFilePath));        ConfigureBuilder configureBuilder = Configure.builder();        XWPFTemplate.compile(templateFilePath,configureBuilder.build())                .render(WarningData)                .write(outputStream);    }

来源地址:https://blog.csdn.net/JavaSupeMan/article/details/125654484

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

poi-tl的使用(最全详解)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Apache POI的基本使用详解

目录基本介绍入门测试(从Excel文件读取数据)第一步:导入maven坐标第二步:创建Excel文件第三步:写测试代码代码说明及扩展入门测试(向Excel文件写入数据)基本介绍 POIpache POI是用java编写的免费开源的跨平台的J
2022-06-04

Android xUtils框架最全使用详解

本文目录xUtils3简介xUtils使用方法使用前准备功能1:访问网络不带参数的网络请求带参数的请求功能2:加载网络图片功能3:框架注解布局文件注解控件注解点击事件注解功能4:数据库映射增加数据删除数据修改数据查询数据 xUtils3简介
2022-06-06

Java使用POI实现导出Excel的方法详解

在项目开发中往往需要使用到Excel的导入和导出,导入就是从Excel中导入到DB中,而导出就是从DB中查询数据然后使用POI写到Excel上。本文将利用POI实现导出Excel,需要的可以参考一下
2022-11-13

MySQL六种约束的示例详解(全网最全)

目录一、概述二、约束演示三、外键约束1、 什么是外键约束2、 不使用外键有什么影响3、 添加外键的语法4、 删除/更新行为5、 演示删除/更新行为四、主键id到底用自增好还是uuid好五、实际开发尽量少用外键一、概述概念: 约束是作用于表
2022-07-26

Android开发效率提升利器-ButterKnife最全使用详解及ButterKnife插件的使用

本文目录ButterKnife 概述使用前准备添加依赖ButterKnife绑定Activity绑定Fragment绑定RecyclerView Adapter绑定基本用法控件注解事件注解资源注解ButterKnife 插件插件添加插件使用
2022-06-06

python argparse的使用步骤(全网最全)

argparse是python的一个命令行参数解析包,在代码需要频繁修改参数时,方便使用,主要用法就是在命令行输入自己想要修改的参数,这篇文章主要介绍了python argparse的使用步骤(全网最全),需要的朋友可以参考下
2023-05-14

小程序使用echarts(全网最简单详细)

文章目录 概要小程序中使用echarts1. ec-canvas2. 下载项目3. 去echarts官网定制:4.点击下载5.引入使用 echarts的option配置知识点归纳整理(还在更新):小结 概要 小程序中使
2023-08-18

Python生成随机数的方法详解(最全)

Python生成随机数的方法有很多,譬如random模块、NumPy库、secrets模块等。本文为大家整理了五个生成随机数的方法(应该是最全的了吧),希望对大家有所帮助
2023-02-07

Android动画之补间动画用法最全详解

本文目录补间动画概述和分类各类补间动画实现xml实现补间动画透明度动画-AlphaAnimation缩放动画-ScaleAnimation位移动画-TranslateAnimation旋转动画-RotateAnimation动画组合-Ani
2022-06-06

ReactRefCallback使用场景最佳实践详解

这篇文章主要为大家介绍了ReactRefCallback使用场景最佳实践详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-12

特定用例下的Combine全面使用详解

这篇文章主要为大家介绍了特定用例下的Combine全面使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-26

全网最详细的org.springframework.jdbc.UncategorizedSQLException的多种解决方法

文章目录 1. 引出问题 2. 分析问题 3. 解决问题 4. 解决该问题的其他方法 4.1 方法1 4.2 方法2 4.3 方法3 4.4 方法4 如果你遇到的问题不是我所
2023-08-28

JavaScrip如何安全使用PaymentRequestAPI详解

这篇文章主要为大家介绍了JavaScrip如何安全使用PaymentRequestAPI详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

可能是全网最详细小程序中使用echarts的教程

在开发微信小程序时,有需求需要使用到柱状图,饼图等图表,下面这篇文章主要给大家介绍了关于小程序中使用echarts的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-11-13

linux系统命令大全使用详解

这篇文章主要讲解了“linux系统命令大全使用详解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux系统命令大全使用详解”吧!  cat cd   chmod chown   cp c
2023-06-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录