powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache POI - save MS Word (*.doc)
9 сообщений из 9, страница 1 из 1
Apache POI - save MS Word (*.doc)
    #38712812
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Накидал навскидку функцию, которая (вроде-как) читает из файла-шаблона *.doc данные, заменяет "маску" ({chopName}) на нужное значение, создает новый файл и сохраняет в нем "скелет" из файла-шаблона с уже измененным значением.

Все работает, за тем лишь исключением, что созданный файл при первом запуске бесконечно долго висит с надписью "Проверка на вирусы ...".
При принудительном закрытии и открытием во второй раз уже нормально открывает, но выкидывает сообщение, что "при предыдущем открытии произошла ошибка" и т.д.

Получается poi первоначально как-то коряво создает doc ? Подскажите плз в чем может быть дело.
Заранее благодарю!

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
    private void docTest() throws IOException {
        FileInputStream inputStream=new FileInputStream(new File("doc\\guardPack\\noticeRemove.doc").getAbsolutePath());
        HWPFDocument doc = new HWPFDocument(inputStream);
        FileChooser fileChooser = new FileChooser();

        fileChooser.setTitle("Сохранить как ...");
        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("Документ Word (*.doc)", "*.doc");
        fileChooser.getExtensionFilters().add(extFilter);
        fileChooser.setInitialFileName("111.doc");
        File userDirectory = new File("C:/");
        fileChooser.setInitialDirectory(userDirectory);

        File file = fileChooser.showSaveDialog(StageController.getStage("clientGuardPackStage"));

        Range range = doc.getRange();
        range.replaceText("{chopName}", "ВАСЬКА");

            if (file != null) {
                FileOutputStream outputStream = new FileOutputStream(new File(file.getAbsolutePath()));
                doc.write(outputStream);
                outputStream.close();
            }
        inputStream.close();
    }
...
Рейтинг: 0 / 0
Apache POI - save MS Word (*.doc)
    #38712817
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
korshun,

Используйте docx. 2014й ведь уже. Даже в захудалых бюджетных организациях на столько старых офисов нет, чтобы docx не понимали.
...
Рейтинг: 0 / 0
Apache POI - save MS Word (*.doc)
    #38712821
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за совет, но docx не получается в данном случае использовать :(
...
Рейтинг: 0 / 0
Apache POI - save MS Word (*.doc)
    #38713063
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем если использовать в качестве входящего файла не doc, а docx и затем уже сохранять в doc, то все ок. Вроде :)
Вдруг кому пригодится.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
    private void docTest() throws IOException, InvalidFormatException {
        XWPFDocument doc = new XWPFDocument(OPCPackage.open("doc\\guardPack\\noticeRemove.docx"));
        FileChooser fileChooser = new FileChooser();

        fileChooser.setTitle("Сохранить как ...");
        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("Документ Word (*.doc)", "*.doc");
        fileChooser.getExtensionFilters().add(extFilter);
        fileChooser.setInitialFileName("111.doc");
        File userDirectory = new File("C:/");
        fileChooser.setInitialDirectory(userDirectory);

        for (XWPFParagraph p : doc.getParagraphs()) {
            for (XWPFRun r : p.getRuns()) {
                if (r.getText(0) != null && r.getText(0).equals("{var1}")) {
                    System.out.println(r.getText(0));
                    String text = r.getText(0).replace("{var1}", "Имя1");
                    r.setText(text,0);
                }
            }
        }

        for (XWPFTable tbl : doc.getTables()) {
            for (XWPFTableRow row : tbl.getRows()) {
                for (XWPFTableCell cell : row.getTableCells()) {
                    for (XWPFParagraph p : cell.getParagraphs()) {
                        for (XWPFRun r : p.getRuns()) {
                            if (r.getText(0) != null && r.getText(0).equals("{var1}")) {
                                System.out.println(r.getText(0));
                                String text = r.getText(0).replace("{var1}", "Имя1");
                                r.setText(text,0);
                            }
                        }
                    }
                }
            }
        }

        File file = fileChooser.showSaveDialog(StageController.getStage("clientGuardPackStage"));

            if (file != null) {
                OutputStream outputStream = new FileOutputStream(new File(file.getAbsolutePath()));
                doc.write(outputStream);
                outputStream.flush();
                outputStream.close();
            }
    }
...
Рейтинг: 0 / 0
Apache POI - save MS Word (*.doc)
    #38713074
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

у нас в конторе 2003-й офис почти везде))) правда стоит заплатка для понимания docx :)
И винда XP повсеместно ))
...
Рейтинг: 0 / 0
Apache POI - save MS Word (*.doc)
    #38713428
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nixicу нас в конторе 2003-й офис почти везде))) правда стоит заплатка для понимания docx :)
Да и на Office XP (на более ранние не пробовал) можно поставить эту заплатку (FFC). Будет открывать и сохранять docx. (правда не сможет работать с объектами документа которые поддерживают только новые Office'ы)
...
Рейтинг: 0 / 0
Apache POI - save MS Word (*.doc)
    #38713663
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
korshun,

Вы xdocreport видели?
...
Рейтинг: 0 / 0
Apache POI - save MS Word (*.doc)
    #38713691
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick, мельком :)
poi как то привычнее уже, давненько юзаю.
...
Рейтинг: 0 / 0
Apache POI - save MS Word (*.doc)
    #38715601
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Апну тему.
Непойму, шозанахер творится :(

В шаблоне есть указатель - *Num*.
Почему, блин, библиотека переносит звездочки на новые строки ? System.out.println(r.getText(0)); выводит:
*
Num
*


Указатель *Doer1F* -
*
Doer
1
F
*


Удаляешь, руками прописываешь - ничего не меняется.
И в целом где-то 20% указателей в файле-шаблоне таким же образом выдергиваются :(
Что за фигня, кто подскажет ?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache POI - save MS Word (*.doc)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]