Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ApachePOI单词表,关于Alt文本的信息_Apache_Ms Word_Apache Poi - Fatal编程技术网

ApachePOI单词表,关于Alt文本的信息

ApachePOI单词表,关于Alt文本的信息,apache,ms-word,apache-poi,Apache,Ms Word,Apache Poi,如何从Word表格中获取Alt文本,例如标题或说明。 我发现的所有信息都有上下文、文本、宽度、样式等需要阅读或修改 我的目标是识别模板中的某些表,以便修改它们。我将在这里做一些假设。首先,你说的是docx格式,其次,“Alt Text”指的是标题 标题只是表格前面或后面的段落。它的样式为标题,运行时带有一些类似文本的表格,可能还包括一个简单的字段SEQ Table。这将是默认的表标题,但它可能只是一个名称类似于部门主管的运行。关键是样式名称。Word使用标准样式名称来计算其他内容,例如TOC 注

如何从Word表格中获取Alt文本,例如标题或说明。 我发现的所有信息都有上下文、文本、宽度、样式等需要阅读或修改


我的目标是识别模板中的某些表,以便修改它们。

我将在这里做一些假设。首先,你说的是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
节点的值。非常感谢。您的信息非常有用。如果答案有用,请向上投票或将其标记为已回答。