【问题标题】:In Apache POI, Is there a way to access XWPF elements by id their id?在 Apache POI 中,有没有办法通过 id 来访问 XWPF 元素?
【发布时间】:2017-07-03 12:02:34
【问题描述】:

我有 word 文档(它基于 docx 和 xml),我想找到一个表格并以编程方式填充它。我正在使用 Apache POI、XWPF API。

有没有办法通过 id 访问 XWPF 元素?

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

谢谢

【问题讨论】:

  • 你在说什么ID?您将如何在 Word 中设置这些 IDWordtable 可能在 Table Properties - Alt Text 中有 Title。是这个意思吗?
  • 嗨 Axel,是的,AFAIK 没有 id。但我想了解其他人如何使用它。替代文本实际上是表格的一个很好的解决方案。但我很好奇其他人如何使用 XWPF 界面。
  • Worddocument 中的元素没有一般的排序标准,除了它们从上到下出现。所以在一般情况下迭代所有IBodyElements,确定你得到了什么BodyElementType,然后用那个元素做你需要做的事情。在特殊情况下,要求必须明确。例如,您可以替换占位符文本或填写表单字段或查找标题/书签/标题/替代文本/...以确定元素。但为此,Word 文档的作者也必须明确要求,因为他必须将这些内容写入文档。

标签: java apache-poi xwpf


【解决方案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);
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 2022-08-12
    • 2019-10-25
    相关资源
    最近更新 更多