`
yuky1327
  • 浏览: 125072 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

word变量替换含段和表格

    博客分类:
  • Java
 
阅读更多
package jeecg.kxcomm.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.transaction.SystemException;

import jeecg.kxcomm.entity.systemmanager.TbContractDocVariableEntity;
import jeecg.kxcomm.entity.systemmanager.TbContractTemplatesDocVariableEntity;

import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.IBodyElement;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;


/**
*
* 操作word文档查找替换
*
* @author zhangjh 新增日期:2012-12-19
* @since ContractManage
*/
public class WordTools {
private static WordTools instance = null;
Logger log = Logger.getLogger(WordTools.class);
private WordTools(){

}

public static WordTools getInstance(){
if(instance == null)
instance = new WordTools();

return instance;
}

public static WordTools getNewInstance(){
return new WordTools();
}

/**
*
* 替换word中的变量并导出.docx
*
* @param templatesDoc
* @param docVariable
* @param exportDoc
* @return
* @author zhangjh 新增日期:2012-12-20
* @since ContractManage
*/
public boolean export(String templatesDoc,List<TbContractDocVariableEntity> docVariable,String exportDoc ){
File bfile = null;
XWPFDocument doc = null;
File file = null;
FileOutputStream fos = null;
OPCPackage pack  = null;
String fileTempPath = PathConstants.CurrentDirectory +"/"+PathConstants.ExportContractPath;
File fileTemp = new File(fileTempPath);
//System.out.println("新建临时文件:"+fileTempPath);
if(!fileTemp.exists()){
fileTemp.mkdirs();
}
fileTempPath += "/temp_"+System.currentTimeMillis()+".docx";
fileTemp = new File(fileTempPath);
try {
log.info("==================================================templatesDoc:"+templatesDoc+",exportDoc:"+exportDoc);
bfile = new File(templatesDoc);
if(!bfile.exists()){
throw new SystemException("合同模版文件不存在,请检查"+templatesDoc+"是否存在");
}
file = new File(exportDoc);
if(file.exists()){
file.delete();
}

org.apache.commons.io.FileUtils.copyFile(bfile, fileTemp);
System.out.println("拷贝模板到临时文件中:templatesDoc->"+templatesDoc+"\n ,fileTemmpPath:"+fileTempPath);

pack = POIXMLDocument.openPackage(fileTempPath);
doc = new XWPFDocument(pack);
//把word中的文章段替换变量
List<XWPFParagraph> paragraphs = doc.getParagraphs();
for (XWPFParagraph tmp : paragraphs) {
List<XWPFRun> runs = tmp.getRuns();
for (XWPFRun aa : runs) {
if(aa.getText(0)==null||"".equals(aa.getText(0)))
continue;
String docText = aa.getText(0)!=null?aa.getText(0).trim():null;

for(TbContractDocVariableEntity var:docVariable){
if (var.getVariablename().equals(docText)) {
log.info("段找到匹配:文档内容->"+docText+",变量名称->"+var.getVariablename());
System.out.println("段找到匹配:文档内容->"+docText+",变量名称->"+var.getVariablename());
aa.setText(var.getContent(), 0);
}
}
}
}
//把word中的表格段替换变量
List<XWPFTable> tables = doc.getTables();
for (XWPFTable table : tables) {
int rcount = table.getNumberOfRows();
for(int i=0;i<rcount;i++){
XWPFTableRow row = table.getRow(i);
List<XWPFTableCell> cells= row.getTableCells();
for(int j=0;j<cells.size();j++){
XWPFTableCell c = cells.get(j);
List<IBodyElement> el =  c.getBodyElements();
for(int h=0;h<el.size();h++){
XWPFParagraph p = (XWPFParagraph) el.get(h);
//System.out.println("XWPFParagraph:"+p.getText());
List<XWPFRun> runs = p.getRuns();
for (XWPFRun aa : runs) {
if(aa.getText(0)==null||"".equals(aa.getText(0)))
continue;
String docText = aa.getText(0)!=null?aa.getText(0).trim():null;
for(TbContractDocVariableEntity var:docVariable){
if (var.getVariablename().equals(docText)) {
log.info("表格找到匹配:文档内容->"+docText+",变量名称->"+var.getVariablename());
System.out.println("表格找到匹配:文档内容->"+docText+",变量名称->"+var.getVariablename());
aa.setText(var.getContent(), 0);
}
}
}
}
}
}
}

fos = new FileOutputStream(exportDoc);
doc.write(fos);
System.out.println("把替换的变量保存到最终文件:"+exportDoc);
} catch (Exception e) {
e.printStackTrace();
}finally{
if(bfile!=null){
bfile = null;
}
if(doc!=null){
doc = null;
}
if(file!=null){
file = null;
}
if(pack!=null){
pack.flush();
try {
pack.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fos!=null){
try {
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fileTemp!=null){
fileTemp.delete();
}
}
return true;
}

/**
*
* 返回word中有效的变量
*
* @param templatesDoc
* @param docVariable
* @return
* @author zhangjh 新增日期:2012-12-20
* @since ContractManage
*/
public HashMap<String, TbContractTemplatesDocVariableEntity> checkVariable(String templatesDoc,List<TbContractTemplatesDocVariableEntity> docVariable){
HashMap<String, TbContractTemplatesDocVariableEntity> map = new HashMap<String, TbContractTemplatesDocVariableEntity>();
try {
OPCPackage pack = POIXMLDocument.openPackage(templatesDoc);
XWPFDocument doc = new XWPFDocument(pack);
List<XWPFParagraph> paragraphs = doc.getParagraphs();
for (XWPFParagraph tmp : paragraphs) {
List<XWPFRun> runs = tmp.getRuns();
for (XWPFRun aa : runs) {
for(TbContractTemplatesDocVariableEntity var:docVariable){
if (var.getVariablename().equals(aa.getText(0))) {
map.put(var.getVariablename(), var);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}

/**
*
* 方法用途和描述: 文件移动
* @param string  文件存在地址
* @param string2   文件需要保存的地址
* @author chenliang 新增日期:2013-1-11
* @since ContractManage
*/
public void moveFile(String string, String string2) {
try {
File uploadFile = new File(string);
if(uploadFile.exists() && uploadFile.isFile()){
File downPath = new File(string2);
FileUtils.copyFile(uploadFile, downPath);
}
} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
PathConstants.CurrentDirectory  = "E://tmp//";
WordTools tools =WordTools.getInstance();
List<TbContractDocVariableEntity> docVariable = new ArrayList();
TbContractDocVariableEntity var=new TbContractDocVariableEntity();
var.setVariablename("$CNUMBER");
var.setContent("AAAAAAA");
docVariable.add(var);//
var=new TbContractDocVariableEntity();
var.setVariablename("$NAME");
var.setContent("BBBBBB");
docVariable.add(var);
try {
tools.export("E://tmp//1407913488149.docx",docVariable, "E://tmp//aa.docx");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
评论

相关推荐

    java替换word中的变量

    总之,使用Java替换Word文档中的变量主要依赖于Apache POI库,通过创建和操作HWPFDocument或XWPFDocument对象来实现。这个过程涉及到对Word文档结构的理解,以及对库提供的API的熟练掌握。在实际项目中,根据需求...

    word读取并替换内容(table与变量都可替换)

    本教程将详细介绍如何在Java环境中实现Word文档的读取及内容替换,包括表格(table)和变量的替换。我们将使用Apache POI库,这是一个强大的开源API,专为处理Microsoft Office格式的文件而设计。 首先,安装Apache...

    word文档模板-使用poi技术替换文档中的变量

    遍历文档中的段落和表格,查找变量并进行替换。示例代码如下: ```java // 获取所有段落 List&lt;XWPFParagraph&gt; paragraphs = doc.getParagraphs(); for (XWPFParagraph paragraph : paragraphs) { String text = ...

    C# NPOI替换Word文档模板

    C#版本 NPOI 批量替换Word文档(doc文件)变量的方法。 网上各种代码都是直接替换run,但实际上很多变量是由多个run表示的,并不能直接用,本代码完美支持{变量}替换。

    Apache poi 根据word模板生成word报表 替换 循环列表 图片

    在本项目中,我们将关注如何使用Apache POI来根据预设的Word模板生成包含替换内容、循环列表和图片的动态Word报表。 首先,我们需要理解Apache POI的核心概念。在处理Word文档时,POI提供了HWPF(Horrible Word ...

    php利用word模版替换并生成word

    3. **模板替换**: 在模板替换中,你通常有一个预设的Word文档,其中包含一些占位符文本。你可以使用PHPWord的`setValue`或`addTextBreak`方法来替换这些占位符。例如: ```php $section = $document-&gt;addSection()...

    .net 按照word模板替换制定内容 含图片 保留格式不变

    .net 按照word模板替换制定内容,含图片,保留格式不变,附件是代码 可以直接使用,测试通过,如果不能运行 可以安装Office组件

    C#操作word,如何进行查找和替换

    ### C#操作Word文档进行查找和替换的知识点详解 #### 一、引入必要的命名空间与组件 为了在C#中操作Word文档,首先需要引入必要的命名空间和引用Microsoft Word对象库。具体步骤如下: 1. **引入命名空间**: ``...

    C#操作word文档 C#实现Word中表格信息读取

    根据提供的文件信息,我们可以归纳出两个主要的知识点:一是...以上就是如何使用C#操作Word文档的相关知识点,包括插入图片和批量替换书签文本的操作过程。这些技术可以帮助开发者高效地处理Word文档,提高工作效率。

    Docxtemplater模板导出word,动态不确定列数的表格,表头加粗,且表格居中

    总的来说,通过理解并熟练应用Docxtemplater的特性,如`loop`、样式控制和`rawXml`,我们可以创建出复杂的、动态的Word文档,包括具有动态列数、加粗表头和居中对齐的表格。这种自动化文档生成能力对于提高工作效率...

    C#按格式导出word(通过word模版标签替换导出)

    这段代码初始化了两个变量`appWord`和`doc`,分别代表Word应用程序对象和Word文档对象。 #### 2. 打开Word模板 ```csharp appWord = new Microsoft.Office.Interop.Word.Application(); // 创建Word应用程序实例 ...

    poi-tl引擎实现world模板内容替换(支持docx)

    而poi-tl则是POI的一个扩展,专注于模板处理,使得我们可以更方便地对Word文档进行内容替换和动态生成。 标题中的“poi-tl引擎实现world模板内容替换(支持docx)”指的是使用poi-tl库来操作Word文档模板,并将其中的...

    Aspose.words 实现插入文件,页面设置,替换 表格操作,分页等

    Aspose.Words是一款强大的文档处理库,用于在.NET环境中创建、编辑、转换和显示Microsoft Word文档。本篇文章将深入探讨Aspose.Words如何实现插入文件、页面设置、文本替换、表格操作以及分页等核心功能。 1. 插入...

    word2010批量修改表格内指定单元格内容(VBA)

    ### Word2010 使用VBA批量修改表格内指定单元格内容 在日常工作中,我们经常会遇到需要对Word文档中的表格进行批量操作的情况,尤其是在处理大量数据时,手动逐个编辑表格不仅耗时而且容易出错。为了提高工作效率并...

    freemarker 导出word表格

    首先,你需要使用Microsoft Word创建所需的表格和格式。Word允许用户设计丰富的布局,包括单元格样式、边框、字体样式等。完成设计后,确保所有的数据占位符都是可编辑的,比如用“${变量名}”代替实际的数据。 2....

    Aspose.Words For .NET 生成word和pdf 支持模板关键字替换图片替换

    在提供的`WordDemo`示例中,可能会包含如何使用Aspose.Words进行模板关键词替换和图片替换的代码片段。通过阅读和理解这段代码,你可以了解到如何在实际项目中应用这些功能。 总的来说,Aspose.Words for .NET ...

    POI使用word模板文件循环输出行并导出word

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在这个例子中,我们将探讨如何使用POI库来处理Word文档,特别是利用模板文件循环输出表格行并导出新的Word文档...

    ASP.NET c#操作word模板插入文字、图片及表格

    首先,你需要创建一个Word模板(例如:`person.dot`),在这个模板文件中,你可以设置好所需的布局,比如预留出插入文字、图片和表格的位置,并使用书签来标识这些位置。书签是一个特殊的标记,用于指定位子,使得...

    VUE动态生成word的实现

    这个过程涉及到对Word文档格式的解析和内容的动态替换。 7. 下载Word文档:生成Word文档后,服务器端可以将其以文件流的形式发送给前端,前端利用axios的blob响应类型来接收这个文件流,并触发文件的下载操作。 ...

    freemarker根据word模板生成word的完整示例

    这些变量是由后台Java代码提供,模板引擎会将这些变量替换为实际值,然后生成最终的输出文档。 在这个"freemarker根据word模板生成word的完整示例"中,描述提到的"template"文件夹存放了XML模板。XML模板是一种结构...

Global site tag (gtag.js) - Google Analytics