2017-07-03 50 views
0

我有Word文档(这是基于DOCX和XML),我想找到一个表并以编程方式填充它。我正在使用Apache POI,XWPF API。在Apache POI中,是否有方法通过id来访问XWPF元素?

有没有办法通过他们的ID访问XWPF元素?

如何创建XWPF元素之间的唯一性,然后使用java进行更改?

感谢

+1

从什么'ID'你在说什么?你将如何在Word中设置这些“ID”?在[Table Properties - Alt Text](https://support.office.com/zh-cn/article/Set-or-change-table-properties-3237de89-b287-4379)中,“Word”表可能具有“标题” -8e0c-86d94873b2e0 #__ toc5)。这是否意味着? –

+0

嗨阿克塞尔,是的AFAIK没有身份证。但我想了解其他人如何使用它。替代文字实际上是一个很好的解决方案。但我很好奇其他人如何使用XWPF接口。 – ozkolonur

+0

“Word”文档中除了从上到下的出现以外,没有一般的排序标准。因此,在一般情况下,遍历所有'IBodyElement's,确定你得到了什么'BodyElementType',然后用这个元素做你需要做的事情。在特殊情况下,要求必须清楚。例如,您可以替换占位符文本或填写表单字段,或者查找标题/书签/标题/ alt-texts/...以确定元素。但是对于这个'Word'文档的作者来说,这个要求也必须是清楚的,因为他必须将这些东西写入文档中。 –

回答

1

我已经实现是找到替换功能(from here);

在我的模板docx文件中,我使用“id like texts”,__heading1__,__subjectname__,然后用下面的代码替换它们。对于表格@ axel-richters解决方案可能是合适的。

private void findReplace(String a, String b, CustomXWPFDocument document){ 
    for (XWPFParagraph p : document.getParagraphs()) { 
     List<XWPFRun> runs = p.getRuns(); 
     if (runs != null) { 
      for (XWPFRun r : runs) { 
       String text = r.getText(0); 
       if (text != null && text.contains(a)) { 
        text = text.replace(a, b); 
        r.setText(text, 0); 
       } 
      } 
     } 
    } 
} 
相关问题