Вставить текст в закладки MS Word

379
30 августа 2017, 14:24

Доброго времени суток! Есть шаблон Word(.doc), его необходимо открыть и на место закладок, которые имеются в документе, вставить текст, после сохранить как новый файл. Текст, который вносится в документ, должен быть прописан в коде.
Код который я смог реализовать прилагаю ниже, прошу помощи)

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class Zamena_text_file {
    public static void main(String[] args)
    {
        // Путь к шаблону
        String filename = "C:\\S.doc";
        POIFSFileSystem fs = null;
        try 
        {
            fs = new POIFSFileSystem(new FileInputStream(filename));
            HWPFDocument doc = new HWPFDocument(fs);
            // добавление данных вместо "меток" в документе
            Range range = doc.getRange();
            range.replaceText("<name>", "953");
            //range.tab("asa");
            // создание нового файла
            OutputStream out = new FileOutputStream("C:\\Отчет.doc");
            // записать данные в файл
            doc.write(out);
            // заставляем поток закончить передачу данных.
            out.flush();
            // закрыть поток данных. 
            out.close();
            // вывод сообщения в консоле
            System.out.println("Файл Отчет.doc успешно создан!");
            // Команда для запуска Excel файла
            Runtime.getRuntime().exec("cmd /c C:\\Отчет.doc");                         
        }       
        catch (Exception e) 
        {
            // В случае ошибки(ок) вывести в консоль систем.ошибки 
            System.out.println(e.getMessage());
            e.printStackTrace();
        }      
    }    
}
Answer 1

Пример кода для замены всех закладок:

Bookmarks bookmarks = document.getBookmarks();
for (int i = 0; i < bookmarks.getBookmarksCount(); i++){
    Bookmark bookmark = bookmarks.getBookmark(i);
    String value = getValue(bookmark.getName());
    setTextInBookmark(bookmark, document, value);
}
private static void setTextInBookmark(Bookmark bookmark, HWPFDocument document, String text) {
    final Range range = new Range(bookmark.getStart(), bookmark.getEnd(), document);
    if (range.text().length() > 0) {
        range.replaceText(text, false); // если в закладке уже есть значение - заменяем
    }
    else {
        range.insertBefore(text);
    }
}
//получение значения закладки в зависимости от ее наименования
private static String getValue(String bookmarkName) {
    if (bookmarkName.equals("name1")) {
        return "1";
    }
    if (bookmarkName.equals("name2")) {
        return "2";
    }
    //....
    return "default value";
}
READ ALSO
открыть картинку через jQuery

открыть картинку через jQuery

Приложение на java Spring, отображение на html+jQueryЕсть сущность для хранения в базе mySql

367
Постраничный вывод данных

Постраничный вывод данных

Добрый день, сделал простенькую пагинацию для своего проекта, хотел сделать чтобы выводилось хотя бы по 5 страниц (сделал это с помощью цыкла...

274
Выборка из таблиц со связью Many To Many

Выборка из таблиц со связью Many To Many

в БД PostgreSQL есть таблица Provider со строками id и nameТакже есть таблица Currencies с полями id и currency, и Countries с полями id и country

389
Как защитить исходный код?

Как защитить исходный код?

Нужно сделать так, чтоб apk файл нельзя было прочитать

314