ApachePOI单词表,关于Alt文本的信息
如何从Word表格中获取Alt文本,例如标题或说明。 我发现的所有信息都有上下文、文本、宽度、样式等需要阅读或修改ApachePOI单词表,关于Alt文本的信息,apache,ms-word,apache-poi,Apache,Ms Word,Apache Poi,如何从Word表格中获取Alt文本,例如标题或说明。 我发现的所有信息都有上下文、文本、宽度、样式等需要阅读或修改 我的目标是识别模板中的某些表,以便修改它们。我将在这里做一些假设。首先,你说的是docx格式,其次,“Alt Text”指的是标题 标题只是表格前面或后面的段落。它的样式为标题,运行时带有一些类似文本的表格,可能还包括一个简单的字段SEQ Table。这将是默认的表标题,但它可能只是一个名称类似于部门主管的运行。关键是样式名称。Word使用标准样式名称来计算其他内容,例如TOC 注
我的目标是识别模板中的某些表,以便修改它们。我将在这里做一些假设。首先,你说的是docx格式,其次,“Alt Text”指的是标题 标题只是表格前面或后面的段落。它的样式为
标题
,运行时带有一些类似文本的表格,可能还包括一个简单的字段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;
}
在Word中,您可以将表格标题设置为唯一,然后以xml格式获取表格:
String tableXML = mytable.getCTTbl();
要提取表格标题,请执行以下操作:
String[] xml = tableXML.split(System.lineSeparator());
String caption = null;
for (String x : xml)
{
if (x.contains("w:tblCaption"))
{
caption = x.split("w:val=")[1].replace("/>", "");
caption = caption.replace("\"", "");
}
}
非常感谢你的全面回答。使用“Alt Text”我的意思是,表的条目在word中具有属性。如果在表格上单击鼠标右键,选择“表格属性”,并在对话框的最后一个选项卡中单击,则表示Alt Text。就是这样,我是说。但你的解决方案对我来说也是可能的。好的,我明白问题所在了。POI使用2006规范。
Alt Text
是表属性(tblPr)
的TBLCoption元素的一部分。这在2006规范中不存在,因此在我们使用的ooxml模式中也不存在。如果您需要Alt文本
,您仍然可以通过自己在XML中导航来获得它,但是POI不会直接帮助您完成这项工作。如果你能使用表格标题,那将是你最好的选择。否则,您需要创建一个方法来检索XML中tblcoption
节点的值。非常感谢。您的信息非常有用。如果答案有用,请向上投票或将其标记为已回答。