如何用Python docx库实现表格整体缩进(对齐2cm制表位)
如何用python-docx将表格对齐到2cm制表位?
我懂你现在的困扰:你已经给段落设置了2cm的制表位,文本能正常缩进,但表格就是没法跟着对齐,修改表格样式的段落缩进还会把单元格里的内容也缩进了,完全不是想要的效果。
其实解决方法很简单,直接给表格对象设置left_indent属性就行,不用去改样式里的段落缩进。python-docx的表格对象本身支持这个属性,和你在Word里手动设置「表格属性」里的左缩进是同一个效果。
修改你的脚本,在创建表格之后加上这一行:
table.left_indent = Cm(2)
完整的修改后代码如下:
import docx from docx.shared import Cm doc = docx.Document() style = doc.styles['Normal'] style.paragraph_format.tab_stops.add_tab_stop(Cm(2)) doc.add_paragraph('My header', style='Heading 1') doc.add_paragraph('\tText is tabbed') table = doc.add_table(rows=0, cols=2, style="Table Grid") # 给表格设置整体左缩进2cm table.left_indent = Cm(2) for rowy in range(1, 5): row_cells = table.add_row().cells row_cells[0].text = 'Row {}'.format(rowy) row_cells[0].width = Cm(5) row_cells[1].text = '' row_cells[1].width = Cm(1.2) doc.save('output.docx')
为什么之前的方法不行?因为你修改Table Grid样式的paragraph_format.left_indent,是把缩进应用到表格内的每一个段落(也就是每个单元格里的文本),而不是整个表格的位置。而直接设置table.left_indent是调整整个表格相对于页面左边距的偏移,这才是你想要的效果。
这样生成的表格就会像你预期的那样,整体左缩进2cm,和文本的制表位对齐啦。
内容的提问来源于stack exchange,提问作者Martin Evans




