如何通过docx库或xml包装表格中的单元格文本?

2024-04-26 14:02:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在使用pythondocx库和oxml来自动更改word文档中的表。不幸的是,无论我做什么,我都不能在表格单元格中换行。在

我成功地操作了表的“autofit”和“fit text”属性,但它们都没有对单元格中文本的包装起作用。我可以看到在我的word文档的xml版本中有一个“w:noWrap”,无论我做什么,我都无法操作和删除它。我相信是它造成了我桌子上的单词包装。在

例如,在本例中,我添加了一个表。我可以调整单元格中的文本,并将“自动调整”设置为“真”,但我一辈子都无法换行文本:

from docx import Document
from docx.oxml import OxmlElement
from docx.oxml.ns import qn

doc = Document()
table = doc.add_table(5,5)
table.autofit = True # Does Autofit but not wrapping

tc = table.cell(0,0)._tc     # As a test, fit text to cell 0,0
tcPr = tc.get_or_add_tcPr()

tcFitText = OxmlElement('w:tcFitText')
tcFitText.set(qn('w:val'),"true")
tcPr.append(tcFitText)      #Does fitting but no wrapping

doc.save('demo.docx')

如果有任何帮助或提示,我将不胜感激。在


Tags: textfrom文档文本importdoctablefit
1条回答
网友
1楼 · 发布于 2024-04-26 14:02:15

<w:noWrap>元素似乎是控制表单元格属性的元素<w:tcPr>的子元素。在

您应该能够使用XPath从表单元格元素访问它:

tc = table.cell(0, 0)._tc
noWraps = tc.xpath(".//w:noWrap")

这里的noWraps变量将是一个包含零个或多个<w:noWrap>元素的列表,在您的例子中可能是一个。在

删除它可能是最简单的方法,您可以这样完成:

^{pr2}$

您还可以采用设置w:noWrap元素的w:val属性值的方法,但随后必须指定属性名称空间的Clark名称,这会增加一些额外的麻烦,并且不会产生不同的结果,除非出于某种原因您希望保留该元素。在

相关问题 更多 >