如何使用Java结合Word模板生成定制化文档报告?

2026-05-24 03:092阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1128个文字,预计阅读时间需要5分钟。

如何使用Java结合Word模板生成定制化文档报告?

目录

一、POM文件中引入依赖(以Spring Boot项目为例)

二、代码实现

三、Word模板示例

以下是Java代码,利用Word模板生成一个Word报告文档,使用的第三方库是Poi-tl。

javaimport org.apache.poi.xwpf.usermodel.*;

public class WordTemplateExample { public static void main(String[] args) throws Exception { // 创建Word文档 XWPFDocument document=new XWPFDocument();

// 创建段落 XWPFParagraph paragraph=document.createParagraph(); XWPFRun run=paragraph.createRun(); run.setText(这是报告的);

// 添加表格 XWPFTable table=document.createTable(2, 3); table.getRow(0).getCell(0).setText(列1); table.getRow(0).getCell(1).setText(列2); table.getRow(0).getCell(2).setText(列3); table.getRow(1).getCell(0).setText(数据1); table.getRow(1).getCell(1).setText(数据2); table.getRow(1).getCell(2).setText(数据3);

// 保存文档 document.write(new FileOutputStream(report.docx)); document.close(); }}

目录
  • 一、pom文件中引入依赖(以为springboot项目为例)
  • 二、代码实现
  • 三、word模板示例

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

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

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

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

<!-- 生成word工具包--> <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.7.3</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency>

注: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; /** * @Description: * @Author: Tarzan Liu * @Date: 2022/9/13 4:54 */ 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对象

如何使用Java结合Word模板生成定制化文档报告?

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模板创建word内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

本文共计1128个文字,预计阅读时间需要5分钟。

如何使用Java结合Word模板生成定制化文档报告?

目录

一、POM文件中引入依赖(以Spring Boot项目为例)

二、代码实现

三、Word模板示例

以下是Java代码,利用Word模板生成一个Word报告文档,使用的第三方库是Poi-tl。

javaimport org.apache.poi.xwpf.usermodel.*;

public class WordTemplateExample { public static void main(String[] args) throws Exception { // 创建Word文档 XWPFDocument document=new XWPFDocument();

// 创建段落 XWPFParagraph paragraph=document.createParagraph(); XWPFRun run=paragraph.createRun(); run.setText(这是报告的);

// 添加表格 XWPFTable table=document.createTable(2, 3); table.getRow(0).getCell(0).setText(列1); table.getRow(0).getCell(1).setText(列2); table.getRow(0).getCell(2).setText(列3); table.getRow(1).getCell(0).setText(数据1); table.getRow(1).getCell(1).setText(数据2); table.getRow(1).getCell(2).setText(数据3);

// 保存文档 document.write(new FileOutputStream(report.docx)); document.close(); }}

目录
  • 一、pom文件中引入依赖(以为springboot项目为例)
  • 二、代码实现
  • 三、word模板示例

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

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

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

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

<!-- 生成word工具包--> <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.7.3</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency>

注: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; /** * @Description: * @Author: Tarzan Liu * @Date: 2022/9/13 4:54 */ 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对象

如何使用Java结合Word模板生成定制化文档报告?

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模板创建word内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!