这篇文章主要为大家详细介绍了Java如何通过word模板实现创建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对象
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内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
沃梦达教程
本文标题为:Java通过word模板实现创建word文档报告
基础教程推荐
猜你喜欢
- springboot自定义starter方法及注解实例 2023-03-31
- Java文件管理操作的知识点整理 2023-05-19
- java基础知识之FileInputStream流的使用 2023-08-11
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- java实现多人聊天系统 2023-05-19
- Java数据结构之对象比较详解 2023-03-07
- Java并发编程进阶之线程控制篇 2023-03-07
- Java实现线程插队的示例代码 2022-09-03
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- Java实现查找文件和替换文件内容 2023-04-06