真实工作项目Java使用apache.poi生成word
加油,新时代打工人!
(图片来源网络,侵删)
将实体类利用poi转成Word文件
demo示例
package com.fqpais.util;
import com.fqpais.business.domain.TestReportTemplate;
import com.fqpais.common.utils.StringUtils;
import org.apache.poi.xwpf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
*@author wh
*@date 2024年05月24日8:59
* 获取数据填充到word模板
*/
public class ReaderWord {
private static final Logger log = LoggerFactory.getLogger(ReaderWord.class);
public static void generateWordFromTemplate(String templatePath, String outputPath, List testReportTemplate) throws IOException {
FileInputStream fis = new FileInputStream(templatePath);
XWPFDocument doc = new XWPFDocument(fis);
int userIndex = 0; // 用来追踪当前处理的用户索引
for (XWPFParagraph p : doc.getParagraphs()) {
for (XWPFRun r : p.getRuns()) {
String text = r.getText(0);
if (text != null) {
text = replaceUserData(text, testReportTemplate.get(userIndex));
r.setText(text, 0);
}
}
}
// 处理表格
for (XWPFTable table : doc.getTables()) {
for (XWPFTableRow row : table.getRows()) {
for (XWPFTableCell cell : row.getTableCells()) {
for (XWPFParagraph para : cell.getParagraphs()) {
for (XWPFRun run : para.getRuns()) {
String text = run.getText(0);
if (text != null) {
text = replaceUserData(text, testReportTemplate.get(userIndex));
run.setText(text, 0);
}
}
}
}
}
// 同样,处理完一个表格后可能需要切换到下一个用户的数据
userIndex++;
// if (userIndex >= testReportTemplate.size()) break; // 防止数组越界
}
FileOutputStream out = new FileOutputStream(outputPath);
doc.write(out);
out.close();
doc.close();
fis.close();
log.info("Word生成完成");
}
// 简化的替换逻辑,实际应用可能需要更复杂的正则表达式匹配
private static String replaceUserData(String text, TestReportTemplate testReportTemplate) {
NumberFormat numberFormat = NumberFormat.getNumberInstance();
String square = numberFormat.format(testReportTemplate.getFieldsSquare());
Date getDate = testReportTemplate.getGetDate();
Date realTestTime = testReportTemplate.getRealTestTime();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
String strDate1 = sdf1.format(realTestTime);
String strDate2 = sdf1.format(getDate);
if(StringUtils.isNull(testReportTemplate.getFarmerName())){
testReportTemplate.setFarmerName("/");
}
if(StringUtils.isNull(testReportTemplate.getCode())){
testReportTemplate.setCode("/");
}
if(StringUtils.isNull(testReportTemplate.getFieldsSquare())){
testReportTemplate.setFieldsSquare(0L);
}
if(StringUtils.isNull(testReportTemplate.getTestEnvironment())){
testReportTemplate.setTestEnvironment("/");
}
if(StringUtils.isNull(testReportTemplate.getFarmerContact())){
testReportTemplate.setFarmerContact("/");
}
if(StringUtils.isNull(testReportTemplate.getTadminRegion().getName())){
testReportTemplate.getTadminRegion().setName("/");
}
if(StringUtils.isNull(testReportTemplate.getTestItems())){
testReportTemplate.setTestItems("/");
}
if(StringUtils.isNull(testReportTemplate.getTestBasis())){
testReportTemplate.setTestBasis("/");
}
if(StringUtils.isNull(testReportTemplate.getTestUseDevice())){
testReportTemplate.setTestUseDevice("/");
}
if(StringUtils.isNull(testReportTemplate.getConclusion())){
testReportTemplate.setConclusion("不作结论。");
}
return text
.replace("{{farmerName}}", testReportTemplate.getFarmerName())
.replace("{{code}}", testReportTemplate.getCode())
.replace("{{fieldsSquare}}",square)
.replace("{{getDate}}",strDate2)
.replace("{{realTestTime}}",strDate1)
.replace("{{farmerContact}}",testReportTemplate.getFarmerContact())
.replace("{{name}}",testReportTemplate.getTadminRegion().getName())
.replace("{{testEnvironment}}",testReportTemplate.getTestEnvironment())
.replace("{{testItems}}",testReportTemplate.getTestItems())
.replace("{{testBasis}}",testReportTemplate.getTestBasis())
.replace("{{testUseDevice}}",testReportTemplate.getTestUseDevice())
.replace("{{conclusion}}",testReportTemplate.getConclusion());
}
}
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
