Здесь я сделаю некоторые предположения. Во-первых, вы говорите о формате docx
, а во-вторых, под «Alt Text» вы подразумеваете заголовок.
Подпись — это просто абзац, который либо предшествует таблице, либо следует за ней. Он будет иметь стиль Caption
, прогон с некоторым текстом, например Таблица, и, возможно, будет включать простое поле SEQ Table
. Это будет заголовок таблицы по умолчанию, но это может быть просто прогон с названием, например Руководители отделов. Ключ — это имя стиля. Word использует стандартные имена стилей для вычисления других вещей, таких как TOC
.
Примечание. В Word нельзя изменить заголовок, выбрав таблицу и щелкнув пункт меню. На самом деле это не связано каким-либо значимым образом. Вы должны изменить абзац.
Итак, чтобы найти заголовок, вам нужно просмотреть список элементов документа XWPFDocument.getBodyElements()
и найти каждый абзац со стилем Caption
. Как только вы нашли тот, который вам нужен, вы можете посмотреть на элемент непосредственно выше или ниже, чтобы найти таблицу. Ваш поиск будет проще, если вы будете знать, что все подписи находятся выше или все ниже таблиц.
Итак, чтобы получить таблицу после определенного именованного заголовка, я бы попробовал что-то вроде этого:
public XWPFTable FindTable(String name) {
boolean foundTable = false;
XWPFParagraph p;
for (IBodyElement elem : doc.getBodyElements()) {
switch (elem.getElementType()) {
case PARAGRAPH:
foundTable = false;
p = (XWPFParagraph) elem;
if (p.getStyle() == "Caption" && p.getText() == name) {
foundTable = true;
}
break;
case TABLE:
if (foundTable) {
return (XWPFTable) elem;
}
break;
case CONTENTCONTROL:
foundTable = false;
break;
default:
foundTable = false;
break;
}
}
return null;
}
03.05.2017
Alt Text
является частью элемента tblCaption элементаtable properties (tblPr)
. Этого нет в спецификации 2006 года и, следовательно, нет в используемой нами схеме ooxml. Если вам нуженAlt Text
, вы все равно сможете получить его, самостоятельно перемещаясь по XML, но POI не поможет вам сделать это напрямую. Если вы можете использовать заголовок таблицы, это будет вашим лучшим выбором. В противном случае вам нужно будет создать метод для получения значения узлаtblCaption
в XML. 03.05.2017