我一直在使用 python docx 库和 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')
如果有任何帮助或提示,我将不胜感激。
最佳答案
<w:noWrap>
元素似乎是 <w:tcPr>
的子元素,控制表格单元格属性的元素。
您应该能够使用 XPath 从表格单元格元素访问它:
tc = table.cell(0, 0)._tc
noWraps = tc.xpath(".//w:noWrap")
noWraps
这里的变量将是一个包含零个或多个 <w:noWrap>
的列表元素,在你的情况下可能是一个。
删除它可能是最简单的方法,您可以这样完成:
if noWraps: # ---skip following code if list is empty---
noWrap = noWraps[0]
noWrap.getparent().remove(noWrap)
您还可以采用设置 w:val
的值的方法w:noWrap
的属性元素,但随后您必须指定属性命名空间的 Clark 名称,这会增加一些额外的麻烦并且不会真正产生不同的结果,除非出于某种原因您想要保留该元素。
关于python - 如何通过 docx 库或 xml 将单元格文本包装在表格中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57222047/