Java 使用word模板创建word文档报告教程

news/2025/1/7 19:30:56/

上面是java 利用word模板生成的一个word报告文档,利用的是第三方类库Poi-tl 是实现的。

poi-tl是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库,你可以非常方便的加入到你的项目中,并且拥有着让人喜悦的特性。

poi-tl网址 Poi-tl Documentation,之前也用过其他几种生成word的方式,比如,直接用Apache POI去生成等,不过都比较麻烦一点,最后比较之后选择了用这个类库。下面给大家上代码教程。

一、pom文件中引入依赖(以为springboot项目为例)

com.deepoove poi-tl 1.7.3 org.apache.poi poi 4.1.2 注:Poi-tl包依赖poi包,版本对照关系如下图

二、代码实现
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.policy.HackLoopTableRenderPolicy;
import org.springblade.core.tool.utils.DateUtil;

import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class WordUtil {

public static void  test(){TestDTO data=new TestDTO();data.setWorkFaceName("14030回采工作面");data.setCreateDate(DateUtil.format(DateUtil.now(),"yyyy年MM月dd日"));TestDTO.Progress progress=new TestDTO.Progress();progress.setWorkFaceName("14030回采工作面");progress.setDate("2019年06月");progress.setProgress(69.2);progress.setArea(13909.2);progress.setProduction(115436.985);progress.setCumulative(115436.985);List<testdto.progress> list=new ArrayList<>();list.add(progress);data.setList(list);double totalProgress = 0;double totalArea=0;double totalProduction=0;for (TestDTO.Progress e : list) {totalProgress=totalProgress+e.getProgress();totalArea=totalArea+e.getArea();totalProduction=totalProduction+e.getProduction();}data.setTotalProgress(totalProgress);data.setTotalArea(totalArea);data.setTotalProduction(totalProduction);data.setDpp(5790.472);data.setDap(5860d);data.setDop(sub(data.getDap(),data.getDpp()));data.setMpp(179504.641);data.setMap(115436.985);data.setMop(sub(data.getMap(),data.getMpp()));data.setYpp(2119312.857);data.setYap(115436.985);data.setYop(sub(data.getYap(),data.getYpp()));data.setCpp(59.063);data.setCap(57.085);data.setCop(sub(data.getCap(),data.getCpp()));data.setDpf(3.46);data.setDaf(3.46);data.setDof(sub(data.getDaf(),data.getDpf()));data.setMpf(69.2);data.setMaf(107.26);data.setMof(sub(data.getMaf(),data.getMpf()));data.setYpf(69.2);data.setYaf(1266.36);data.setYof(sub(data.getYaf(),data.getYpf()));data.setCpf(352.92);data.setCaf(352.92);data.setCof(sub(data.getCaf(),data.getCpf()));if(data.getMop()>0){data.setRp("本月超出产量指标:"+data.getMop()+" 吨");}else{data.setRp("本月剩余产量指标:"+Math.abs(data.getMop())+" 吨");}if(data.getMof()>0){data.setRf("本月超出进尺指标:"+data.getMof()+" 吨");}else{data.setRf("本月剩余进尺指标:"+Math.abs(data.getMof())+" 吨");}data.setFaultAge("F186断层");data.setDistance(514.809);HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();Configure config = Configure.newBuilder().bind("list", policy).build();XWPFTemplate template = XWPFTemplate.compile("C:\Users\Lenovo\Desktop\word\回采进度生产分析报告模板.docx",config).render(data);//调用模板,填充数据try {FileOutputStream out = new FileOutputStream("C:\Users\Lenovo\Desktop\word\test.docx");//要导出的文件名template.write(out);out.flush();out.close();template.close();} catch (IOException e) {e.printStackTrace();}
}private static double sub(double a,double b){BigDecimal x=BigDecimal.valueOf(a);BigDecimal y=BigDecimal.valueOf(b);BigDecimal z=x.subtract(y);return z.doubleValue();
}public static void main(String[] args) {WordUtil.test();
}

}</testdto.progress>
TestDTO对象
import lombok.Data;

import java.util.List;

@Data
public class TestDTO {

private String createDate;
private String workFaceName;private List<progress> list;
private Double totalProgress;
private Double totalArea;
private Double totalProduction;private Double dpp;
private Double dap;
private Double dop;
private Double mpp;
private Double map;
private Double mop;
private Double ypp;
private Double yap;
private Double yop;
private Double cpp;
private Double cap;
private Double cop;private Double dpf;
private Double daf;
private Double dof;
private Double mpf;
private Double maf;
private Double mof;
private Double ypf;
private Double yaf;
private Double yof;
private Double cpf;
private Double caf;
private Double cof;private String rp;
private String rf;private String faultAge;
private Double distance;@Data
static
class Progress{private String workFaceName;private String date;private Double progress;private Double area;private Double production;private Double cumulative;
}

}

可以把内部类,改成单独类。运行WordUtil的主方法即可,生成word文档,可以根据自己的需求改造成接口。

三、word模板示例

文章转自:Java 使用word模板创建word文档报告教程_Java-答学网

作者:答学网,转载请注明原文链接:http://www.dxzl8.com/


http://www.ppmy.cn/news/356459.html

相关文章

HBuilderX 自述文件 (markdown格式)

HBuilderX 自述文件 (markdown格式) HBuilderX&#xff0c;H是HTML的首字母&#xff0c;Builder是构造者&#xff0c;X是HBuilder的下一代版本。我们也简称HX。 HX是轻如编辑器、强如IDE的合体版本。 让我们简单了解下HX的特点 轻巧 仅10余M的绿色发行包(不含插件)极速 不管是…

C99的一些新特性记录

固长类型头文件<stdint.h> 由于历史原因&#xff0c;C语言中实现的整型数只保证了在不同硬件体系中的最小长度&#xff0c;因此在使用时&#xff0c;需要根据代码实际运行的平台来确定类型的长度&#xff0c;这导致代码非常不方便移植。C99标准通过增加固长类型头文件引入…

Java操作Word方法汇总,并详细介绍最简单的方法!!吊打POI以及那些POI的封装库

因为boss提了一个根据信息自动生成Word的需求&#xff0c;所以我就研究了一下这一方面的库 经过我的研究&#xff0c;一般常用的有以下几种方法&#xff1a; 1.直接freemaker渲染&#xff0c;就是把要加入的数据用${}包起来&#xff0c;然后word另存为xml文件&#xff0c;再改…

HBase 官方文档中文版

&#xfeff;&#xfeff;&#xfeff;原文出自&#xff1a; http://abloz.com/hbase/book.html Apache HBase™ 参考指南 HBase 官方文档中文版 Copyright © 2012 Apache Software Foundation. Revision History Revision 0.95-SNAPSHOT 2012-12-03T13:38 中文版翻译整理…

flowjo汉化版_FlowJo10中文免费版-流式细胞分析软件FlowJo 10下载 附安装教程-下载啦...

FlowJo是一款功能强大的流式数据分析软件,顾名思义主要用于分析流式仪产生的数据,灵活的数据呈现方式,可将数据以一维直方图、二维图形或者动态三维图形展示,多种图形类型可选,具有强大的批处理功能,可同时分析多个数据,需要的朋友赶快下载吧! 软件功能 一、阶梯式设门…

java word 添加图片_java如何在word中添加图形?图文详解

众所周知。在java编程语言中有许多的知识都是与我们的工作与生活息息相关的。java的应用是十分广泛的。今天就来为大家介绍java如何在word中添加图形并且通过生动的图片详细解析。 首先介绍如何使用java编程在Word文档中添加形状(图形),这其中包括添加单个图形、组合图形,和格…

Java后端生成Echarts并渲染Word转PDF

生成pdf文件 文件要素 文件中包含图片文件中包含列表文件中包含表格文件中包含循环嵌套写入的内容文件需要后端生成echarts图表数据 基于以上几点考虑 技术选取 方式一 itext7是一款用于生成PDF文档的一个java类库,通过iText不仅可以生成PDF或rtf的文档&#xff0c;而且可以…

word@tips官方文档和教程@软件界面介绍@功能区自定义@拼写检查@AI润色改进@ 图片顶部上方插入文字

文章目录 word 文档和教程word软件界面元素字符和标记格式标记段落标记(paragraph marks) 自定义功能区(Ribbon)自定义功能区要点层次关系添加自定义选项卡(tab)向已有的选项卡(tab)中添加自定义组(group)默认选项卡自定义选项卡 自定义快速访问工具栏 word最后的空白页鼠标/快…