Замена текста в WinWord doc с использованием Apache POI - PullRequest
1 голос
/ 03 августа 2010

Мне нужно заменить определенный текст в документе WinWord.Проблема в том, что любая замена текста, которую я делаю в Range с помощью функции replaceText, создает поврежденный файл WinWord, если только строки замены и замены не имеют одинаковую длину.Мы будем иметь дело с динамическим контентом, поэтому это не сработает.

Спецификации объекта диапазона: http://poi.apache.org/apidocs/org/apache/poi/hwpf/usermodel/Range.html#replaceText(java.lang.String, java.lang.String)

Функция replaceText имеет необязательный третий параметр, int, чтобы указать какое-то смещение.Я подумал, может быть, это может быть решением, но параметр не может даже обработать отрицательное значение, что затрудняет или делает невозможным замену, если только смещение (replace.length () - replace.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();

Код выполняется без проблем, но создает файл с разбитым словом.Что я могу сделать?

1 Ответ

1 голос
/ 02 ноября 2012

Я полагаю, что когда вы добираетесь до poi 3.8, эта проблема решается. При работе с бета5 этот код у меня работает. Сгенерированный файл слова можно просто открыть с помощью piiiie в файле, где раньше был ваш caaaaaaake

...