Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache POI - save MS Word (*.doc) / 9 сообщений из 9, страница 1 из 1
05.08.2014, 11:13
    #38712812
korshun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache POI - save MS Word (*.doc)
Накидал навскидку функцию, которая (вроде-как) читает из файла-шаблона *.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
05.08.2014, 11:16
    #38712817
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache POI - save MS Word (*.doc)
korshun,

Используйте docx. 2014й ведь уже. Даже в захудалых бюджетных организациях на столько старых офисов нет, чтобы docx не понимали.
...
Рейтинг: 0 / 0
05.08.2014, 11:19
    #38712821
korshun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache POI - save MS Word (*.doc)
Спасибо за совет, но docx не получается в данном случае использовать :(
...
Рейтинг: 0 / 0
05.08.2014, 14:13
    #38713063
korshun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache POI - save MS Word (*.doc)
В общем если использовать в качестве входящего файла не 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
05.08.2014, 14:21
    #38713074
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache POI - save MS Word (*.doc)
Blazkowicz,

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

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

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


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


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


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