我需要替换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文件。 我该怎么办?
答案 0 :(得分:1)
我相信当你到达poi 3.8时,这个问题就解决了。使用beta5时,此代码适用于我。生成的word文件可以在你caaaaaaake曾经的文件中用piiiie打开就好了