当前位置: 首页 > 面试题库 >

用Java替换Word文档模板中的变量

令狐嘉禧
2023-03-14
问题内容

我想加载模板Word文档以向其添加内容并另存为新文档。我正在处理.doc文件。

经过长时间的研究,我仅找到docx的解决方案:

http://www.smartjava.org/content/create-complex-word-docx-documents-
programatically-docx4j

http://www.sambhashanam.com/mail-merge-in-java-for-microsoft-word-document-
part-i/

因此,我想将以这种格式编写的任何变量替换为:$VAR它的值。我可以使用Velocity或Apache-
poi做到这一点,什么是最好的解决方案?任何帮助将不胜感激。


问题答案:

是的,您可以使用Apache-POI做到这一点。您的变量名称必须唯一。看下面的代码

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Section;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class HWPFTest {
    public static void main(String[] args){
        String filePath = "F:\\Sample.doc";
        POIFSFileSystem fs = null;        
        try {            
            fs = new POIFSFileSystem(new FileInputStream(filePath));            
            HWPFDocument doc = new HWPFDocument(fs);
            doc = replaceText(doc, "$VAR", "MyValue1");
            saveWord(filePath, doc);
        }
        catch(FileNotFoundException e){
            e.printStackTrace();
        }
        catch(IOException e){
            e.printStackTrace();
        }
    }

    private static HWPFDocument replaceText(HWPFDocument doc, String findText, String replaceText){
        Range r1 = doc.getRange();

        for (int i = 0; i < r1.numSections(); ++i ) { 
            Section s = r1.getSection(i); 
            for (int x = 0; x < s.numParagraphs(); x++) { 
                Paragraph p = s.getParagraph(x); 
                for (int z = 0; z < p.numCharacterRuns(); z++) { 
                    CharacterRun run = p.getCharacterRun(z); 
                    String text = run.text();
                    if(text.contains(findText)) {
                        run.replaceText(findText, replaceText);
                    } 
                }
            }
        } 
        return doc;
    }

    private static void saveWord(String filePath, HWPFDocument doc) throws FileNotFoundException, IOException{
        FileOutputStream out = null;
        try{
            out = new FileOutputStream(filePath);
            doc.write(out);
        }
        finally{
            out.close();
        }
    }
}


 类似资料:
  • 我想加载一个模板word文档以添加内容并另存为新文档。我在处理.文件。 经过长时间的研究,我只找到了docx的解决方案: 所以我想用它的值替换以这种格式编写的任何变量:。我可以用velocity或Apache-poi来做它,什么是它的最佳解决方案。任何帮助都将不胜感激。

  • 编辑:我发现如果我向UnmarshallFromTemplate.docx添加一些文本并保存它,它不会替换新的文本行。-标记以某种方式拆分为多个标记: 编辑document.xml中的文本并添加缺少的信息没有多大帮助。 编辑2: 伙计们。我找到了一个非常适合自己的解决办法,不知道为什么花了这么长时间才弄明白。正如我所说的:运行在哪里分裂,原因是在我看来是${}。因此,我只是在占位符之前使用了一个#

  • 问题内容: 我想从HTML页面创建Word文档。我打算在HTML页面上获取值,然后将这些值传递给文档模板。我已经使用JSOUP解析HTML页面的内容,并且在Java程序中获得了值。我现在想将这些值传递给Word文档模板。我想知道什么是可以用来创建文档模板并将值传递到模板以创建word文档的最佳技术。 谢谢。 问题答案: 我发现一些非常有趣和简单的东西。我们只需要为要创建的文档创建一个简单的.xml

  • 问题内容: 我需要打开一个文件(我并不挑剔,我只想让它工作),将其解析为占位符(或类似的东西),放入我自己的数据,然后返回生成的文件。 最重要的是,我需要免费的工具来实现这一目标。 我一直在寻找适合自己需求的东西,但找不到任何东西。Docmosis,Javadocx,Aspose等工具是商业化的。据我了解,Apache POI尚无法成功实现这一目标(他们目前还没有任何正式的开发人员在框架的Word

  • 下面是我已经尝试过的代码: 有什么技巧或解决办法我可以实现它?

  • 问题内容: 在同一页面中提到的oodocx模块会将用户引向一个似乎不存在的/ examples文件夹。 我已经阅读了python-docx 0.7.2的文档,以及在上可以找到的所有内容,因此请相信我已经完成了“作业”。 Python是我所知道的唯一语言(初学者+,也许是中级),所以请不要假定对C,Unix,xml等有任何了解。 任务:打开其中包含一行文本的ms-word 2007+文档(为简单起见