Редактирование таблицы внутри файла docx с использованием Apache POI приводит к неожиданным результатам.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Редактирование таблицы внутри файла docx с использованием Apache POI приводит к неожиданным результатам.

Сообщение Anonymous »

У меня есть файл шаблона docx в ресурсах проекта. Файл содержит как простые абзацы, так и таблицу. Я хочу открыть его, просмотреть содержимое и заменить части, отмеченные специальными символами. Я не могу возиться с шаблоном и не могу использовать DOCX4J из-за неряшливого устаревшего кода, поэтому я остановился на Apache POI 3.9.
В основном у меня все получилось. работает, но в выходном файле получаю странные результаты.
Мой текущий код:

Код: Выделить всё

String fileNameDocx = "/documentTemplates/template.docx";
FileOutputStream fos= new FileOutputStream("C:\\temp\\output.docx"); //this is just to test how it works
InputStream is = getClass().getClassLoader().getResourceAsStream(fileNameDocx);

XWPFDocument document = new XWPFDocument(is);

List paragraphs = document.getParagraphs();
for (XWPFParagraph para : paragraphs) {
System.out.println(para.getText()); //this works fine
}

for (XWPFTable table : document.getTables()) {
for (XWPFTableRow row : table.getRows()) {
for (XWPFTableCell cell : row.getTableCells()) {
System.out.println("cell text: " + cell.getText()); //this works fine as well
if (cell.getText().startsWith(someSymbol) && cell.getText().endsWith(anotherSymbol)) {
//this correctly finds the cell I want to replace
cell.setText("justTesting");
System.out.println("new cell text: " + cell.getText()); //for some reason, this outputs the old cell content
}
}
}
}

document.write(fos);
is.close();
fos.close();
Документ по указанному временному пути успешно обновлен. Однако по непонятным мне причинам отредактированная ячейка содержит как старый, так и следующий текст, поэтому содержимое выглядит как «someSymbolanotherSymboljustTesting», а не только «justTesting». Я, наверное, идиот, но я бы понял, если бы контент вообще не менялся или был бы только новый текст, но как мне туда вставить и то, и другое?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ed-results
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»