使用Apache POI在WinWord doc中替换文本

时间:2010-08-02 21:34:32

标签: java ms-word apache-poi

我需要替换WinWord文档中的某些文本。问题是,我在带有replaceText函数的Range上做的任何文本替换都会创建一个损坏的WinWord文件,除非替换和替换的字符串都是完全相同的长度。我们将处理动态内容,因此不会这样做。

范围对象规格: http://poi.apache.org/apidocs/org/apache/poi/hwpf/usermodel/Range.html#replaceText(java.lang.String,java.lang.String)

replaceText函数有一个可选的第三个参数int,用于指定某种偏移量。我想也许这可能是解决方案,但是参数甚至不能处理负值,这使得除非偏移量(replacement.length() - replacement.length())为正,否则很难或不可能进行替换。但是,我可能需要它是消极的。无论如何,如果另外两个参数不等长,文档中的任何内容似乎都不会暗示需要这个偏移参数。

这是我的代码: (假设a.doc只包含“caaaaaaake”)

      String inputFilename = "C:\\\a.doc"; 

      String outputFilename = "C:\\b.doc";
      POIFSFileSystem fs = null;
      FileInputStream fis = new FileInputStream(inputFilename);
      fs = new POIFSFileSystem(fis);

      HWPFDocument doc = new HWPFDocument(fs);

      Range range = doc.getRange();
      range.replaceText("caaaaaaake", "piiiie");


      FileOutputStream fos = new FileOutputStream(outputFilename);
      doc.write(fos);

      fis.close();
      fos.close();

代码执行没有问题,但它会创建一个损坏的word文件。 我该怎么办?

1 个答案:

答案 0 :(得分:1)

我相信当你到达poi 3.8时,这个问题就解决了。使用beta5时,此代码适用于我。生成的word文件可以在你caaaaaaake曾经的文件中用piiiie打开就好了