如何使用POI操作Word文本框中的内容|Java开发|码途山海.智隐长卷 -

程序人生|重庆纽新

找回密码
立即注册

QQ登录

只需一步,快速开始

欢迎访问【程序人生-重庆纽新】,本网站为软件开发人员视觉的IT资讯、软件开发中各种问题的解决办法!!
搜索
发新帖


2308

积分

0

好友

259

主题
楼主
发表于 2015-7-31 13:34:18 | 查看: 1450| 回复: 0

在2003版本的的doc文件中,POI可以使用HWPF很方便的获取range,然后使用replace方法替换文本框中的内容,不过好像Word背景图片什么都没有了。在docx中,正常的文本段落还是比较方便替换的,但是遇到文本框中的文字就无力了。还好POI提供了获取文档的XML内容的方法,因此可以通过XML来修改文本框中的内容,但是此xml非dom4j,而是XMLbeans,一个很少有人用的XML框架。


工具/原料
  • Java
  • POI
  • XMLBeans

方法/步骤

  • 第一步,使用输入流打开文件,并获得文档的XWPFDocument对象。然后获得文档的所有段落,进而获得要操作的文本框所在的段落,具体使用时候,可以通过判断或者print操作得知要操作的文本框到底是哪一段。

    FileInputStream fis = new FileInputStream("e:/file.docx");
    XWPFDocument doc = new XWPFDocument(fis);
    List paragraphList = doc.getParagraphs();
    XWPFParagraph paragraph = paragraphList.get(10);
  • 第二步,获取XWPFParagraph的XmlObject,然后获得XmlObject对象的游标。可以通过打印XmlObject来得知当前XML的内容,也可以使用XmlCursor的getName方法和getTextValue方法来查看当前游标所在位置的Node及Node的值。

    XmlObject object = paragraph.getCTP().getRArray(1);
    XmlCursor cursor = object.newCursor();
  • 第四步,通过移动游标,找到要修改的文本所在位置,然后使用游标的setTextValue来设置其值。

    //修改第一处文本:
    cursor.toChild(1); cursor.toChild(0); cursor.toChild(3); cursor.toChild(0); cursor.toChild(0); cursor.toChild(3); cursor.toChild(1); cursor.setTextValue("First");
    // 修改第二处文本
    cursor.toParent(); cursor.toParent(); cursor.toChild(1);
    cursor.toChild(3); cursor.toChild(1);
    cursor.setTextValue("Second");

  • 第四步,保存文件、关闭输入输出流。
    FileOutputStream fos = new FileOutputStream("e:/export.docx");
    doc.write(fos);
    fos.flush();
    fos.close();
    fis.close();

收藏回复 只看该作者 道具 举报

高级模式
B Color Image Link Quote Code Smilies



QQ|小黑屋| 码途山海.智隐长卷 渝ICP备15002301号-2   渝公网安备50011202504426

GMT+8, 2025-5-18 05:14 , Processed in 0.038735 second(s), 24 queries .

©Copyright 程序人生!

©2012-2015重庆纽新

快速回复 返回顶部 返回列表