Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
2 / 2 / 1
Регистрация: 02.06.2013
Сообщений: 60

Apache POI

18.05.2018, 01:38. Показов 2445. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу заменить слова в ворде программно, перепробовал кучу способов, потратил пол дня, решения так и не нашёл и решил попробовать Apache POI. Наустанавливал кучу библиотек чтобы запустить
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
public static void main(String[] args) throws IOException {
 
        String zipFilePath = "C:\\Users\\Admin\\Desktop\\DOCXreplace\\src\\Attachments\\Template.zip";
        String destDir = "C:\\Users\\Admin\\Desktop\\DOCXreplace\\src\\Attachments\\Output";
        unzip(zipFilePath, destDir);
 
        File file = new File("C:\\Template.docx");
        FileInputStream fis = new FileInputStream(file.getAbsolutePath());
        XWPFDocument doc = new XWPFDocument(fis);
        for (XWPFParagraph p : doc.getParagraphs()) {
            List<XWPFRun> runs = p.getRuns();
            if (runs != null) {
                for (XWPFRun r : runs) {
                    String text = r.getText(0);
                    if (text != null && text.contains("needle")) {
                        text = text.replace("needle", "haystack");
                        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()) {
                            String text = r.getText(0);
                            if (text != null && text.contains("needle")) {
                                text = text.replace("needle", "haystack");
                                r.setText(text,0);
                            }
                        }
                    }
                }
            }
        }
        doc.write(new FileOutputStream("output.docx"));
 
    }
Но по итогу получаю на выходе непонятную ошибку (при отладке видно, что ошибка возникает во время new XWPFDocument)
Ошибка:
Java
1
2
3
4
5
6
7
8
9
10
"C:\Program Files\Java\jdk1.8.0_141\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2018.1.3\lib\idea_rt.jar=53592:C:\Program Files\JetBrains\IntelliJ IDEA 2018.1.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_141\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_141\jre\lib\rt.jar;C:\Users\Admin\Desktop\DOCXreplace\out\production\DOCXreplace;C:\Users\Admin\Desktop\poi-ooxml-3.9.jar;C:\Users\Admin\Desktop\apache-commons-lang.jar;C:\Users\Admin\Desktop\poi-ooxml-3.6.jar;C:\Users\Admin\Desktop\org.apache.poi-osgi-3.8.jar;C:\Users\Admin\Desktop\xmlbeans-2.6.0.jar;C:\Users\Admin\Desktop\dom4j-1.5.jar;C:\Users\Admin\Desktop\poi-ooxml-schemas-3.7-beta1.jar;C:\Users\Admin\Desktop\ooxml-schemas-1.1.jar" Main
Exception in thread "main" java.lang.NoSuchMethodError: org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFootnotes.getFootnoteList()Ljava/util/List;
    at org.apache.poi.xwpf.usermodel.XWPFFootnotes.onDocumentRead(XWPFFootnotes.java:84)
    at org.apache.poi.xwpf.usermodel.XWPFDocument.initFootnotes(XWPFDocument.java:235)
    at org.apache.poi.xwpf.usermodel.XWPFDocument.onDocumentRead(XWPFDocument.java:137)
    at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:159)
    at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:123)
    at Main.main(Main.java:77)
 
Process finished with exit code 1
Помогите, кто знает, что делать в этом случае или кто сталкивался с подобной ситуацией?
Или может у вас есть альтернативный способ заменить слова в ворде
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.05.2018, 01:38
Ответы с готовыми решениями:

Apache POI
Apache POI : Проблема с обновлением Excel, после того как в ячейки записываются новые значения : java.lang.IllegalStateException:...

Java Apache POI
Подскажите как перенести данные из конкретных ячеек (данные в виде чисел) для последующих операций над ними в java. Обратиться к файлу и...

Как установить Apache POI?
Нашла один урок в сети по работе в Java с xls файлами. Но чтобы с ними работать, нужно установить Apache POI. Как - там не сказано. Есть...

3
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
18.05.2018, 05:59
Лучший ответ Сообщение было отмечено Loctary как решение

Решение

Ну судя по всему XWPFFootnotes.java в 84й строке вызывает метод getFootnoteList() у объекта типа CTFootnotes и ждет в ответ List, но в той версии библиотеки, где находится CTFootnotes, которую вы подключили к проекту, видимо у метода getFootnoteList() изменилась сигнатура (поменялось имя, изменился тип возвращаемого значения и т.д.) вот и ошибка.
Рекомендую использовать maven, он при сборке сам подтянет нужные библиотеки. Ну либо ищите информацию о том какие версии какие библиотеки в вашем проекте используют.
1
 Аватар для Aviz__
2741 / 2050 / 507
Регистрация: 17.02.2014
Сообщений: 9,470
18.05.2018, 10:50
Цитата Сообщение от Loctary Посмотреть сообщение
кучу способов
поделись. может, в этой куче ты выкинул алмазы...
0
2 / 2 / 1
Регистрация: 02.06.2013
Сообщений: 60
18.05.2018, 18:35  [ТС]
Скорее всего про библиотеки так и есть, но я вот как я решил по итогу:
Java
1
2
3
        Path path = Paths.get(new File("Template.docx").getAbsolutePath().replace("\\", "\\\\"));
        byte[] byteData = Files.readAllBytes(path);
        XWPFDocument doc = new XWPFDocument(new ByteArrayInputStream(byteData));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.05.2018, 18:35
Помогаю со студенческими работами здесь

Apache POI Exel копирование строки
Всем привет. Пишу программку, смысл такой: Есть файл .xls, в котором 2 страницы, одна заполнена таблицей, вторая пустая. Нужно в...

Не удается подключить библиотеку Apache.poi
Здравствуйте Уважаемые форумчане. Такой вопрос: Работаю с Excel.Использую Apache poi в maven проекте. Дополнительно подключил либу...

Apache POI - save MS Word (*.doc)
Накидал навскидку функцию, которая (вроде-как) читает из файла-шаблона *.doc данные, заменяет &quot;маску&quot; ({chopName}) на нужное...

Apache POI - Word. Вставка изображения
Доброго времени, уважаемые пользователи! Нужно вставить картинку в Word - документ. Применяю библиотеку Apache POI. Изображение...

Apache.poi Чтение и извлечение текста из docx файла
Пытаюсь сделать так, чтоб метод читал и выводил на консоль текст документа docx формата. public static void readDocxFile(String...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru