Обновление документа MSWord с помощью Apache POI - PullRequest
4 голосов
/ 15 сентября 2011

Я пытаюсь обновить документ Microsoft Word, используя Apache POI. Документ msword - это шаблон, который содержит несколько заполнителей в форме "$ {place.holder}", и все, что мне нужно сделать, это заменить их определенными значениями. То, что у меня так далеко, это

private void start() throws FileNotFoundException, IOException {

    POIFSFileSystem fsfilesystem = null;
    HWPFDocument hwpfdoc = null;

    InputStream resourceAsStream =  getClass().getResourceAsStream("/path/to/document/templates/RMA FORM.doc");       
    try {
        fsfilesystem = new POIFSFileSystem(resourceAsStream );
        hwpfdoc = new HWPFDocument(fsfilesystem);
        Range range = hwpfdoc.getRange();

        range.replaceText("${rma.number}","08739");
        range.replaceText("${customer.name}", "Roger Swann");

        FileOutputStream fos = new FileOutputStream(new File("C:\\temp\\updatedTemplate.doc"));
        hwpfdoc.write(fos);
        fos.flush();
        fos.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

Программа работает без ошибок. Если я загляну в выходной файл с помощью шестнадцатеричного редактора, то увижу, что программа заменила заполнители. Однако, когда я пытаюсь открыть документ с помощью MSWord, MSWord вылетает.

Есть ли какой-то шаг (серия шагов), который я пропускаю, или мне в принципе не повезло с этим? Нужно ли настраивать какие-либо счетчики, поскольку длина замещающего текста не совпадает с длиной заменяемого текста?

Привет

1 Ответ

0 голосов
/ 25 сентября 2013

используйте new FileInputStream() вместо getClass().getResourceAsStream("/path/to/document/templates/RMA FORM.doc");

...