python - 如何使用 Python-Docx 将自定义 XML 添加到元素?

标签 python lxml python-docx

我一直在尝试为我的表格获取文本换行,这在 python-docx 中没有实现。

enter image description here

到目前为止一切顺利,我已经隔离出 MS Word 添加了 <w:tblpPr w:leftFromText="180" w:rightFromText="180" w:vertAnchor="text" w:tblpY="1"/>作为表属性元素的子元素,所以我只需要将它注入(inject)到 python-docx 中的表中。

enter image description here

我真的很接近。因为我能够在库中找到要添加子项的元素类。但是,我的问题在于 w: 命名空间,因为它不允许我构建一个带有“:”字符的 Element 标记。我尝试了两种方法,都失败了。

tblPrElement = Element('w:tblpPr ', {'w:leftFromText': '180', 'w:rightFromText': '180', 'w:vertAnchor': 'text', 'w:tblpY': '1' })

tblPrElement = parse_xml('<w:tblpPr w:leftFromText="180" w:rightFromText="180" w:vertAnchor="text" w:tblpY="1"/>')

如果我尝试省略 w: ...

document = Document()
table = document.add_table(rows=1, cols=3)
tblPrElement = parse_xml('<tblpPr leftFromText="180" rightFromText="180" vertAnchor="text" tblpY="1"/>')
table._tblPr.append(tblPrElement)

...然后生成文档,但 ms word 无法打开它,因为 xml 看起来像这样:

enter image description here

最佳答案

python-docx 有一个用于创建元素的 qn 方法。

def qn(tag):
    """
    Stands for "qualified name", a utility function to turn a namespace
    prefixed tag name into a Clark-notation qualified tag name for lxml. For
    example, ``qn('p:cSld')`` returns ``'{http://schemas.../main}cSld'``.
    """

它允许您键入带有命名空间前缀的 XML。

from docx.oxml.ns import qn

def set_text_wrap_around_table(table):
    tbl_properties_element = Element(qn('w:tblpPr'),
                           {
                              qn('w:leftFromText'): '180',
                              qn('w:rightFromText'): '180',
                              qn('w:vertAnchor'): 'text',
                              qn('w:tblpY'): '1'
                           })
    table._tblPr.append(tbl_properties_element)

如果您要创建的元素已经在 python-docx 中定义了一个类,您可以使用 docx.oxml.OxmlElement 创建它,例如,您可以创建一个段落运行元素类,例如所以:

from docx.oxml import OxmlElement

run_element = OxmlElement('w:r')

这具有将其可能的子项定义为属性等的额外好处。

关于python - 如何使用 Python-Docx 将自定义 XML 添加到元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70992530/

相关文章:

python - 如何从这些数字中获取日期

python - SQL 错误 1054, "Unknown column ' xxxxx' in 'field list' “在带有占位符的 Python 中

python - AWS Sagemaker : Which function/code is required in entry_point file for a prediction when you upload your own, 本地训练的 SKlearn 模型 tarball?

python - 使用 python 和 lxml 从表中提取文本

python - 奇怪的 Pandas.read_html 错误

python - 这是我的函数或 Python 中的 docx.Document 的缺陷吗

python - 如何限制 Python 类上可用的属性

python - 如何用lxml解析html页面,<br/>搞砸了?

python - 在替换 python-docx 中的单词时保留样式

python - 如何在python 3中将png文件添加到word文档中