docx表如何缩进?我试图将在2cm处设置了制表位的表格排成一行。以下脚本创建一个标题,一些文本和一个表:

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')

# This indents the paragraph inside, not the table
# style = doc.styles['Table Grid']
# style.paragraph_format.left_indent = Cm(2)

table = doc.add_table(rows=0, cols=2, style="Table Grid")

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')


它产生一个没有标识的表,如下所示:

python - 使用Python的docx库,如何缩进表?-LMLPHP

表格如何缩进如下?
(最好不必加载现有文档):

python - 使用Python的docx库,如何缩进表?-LMLPHP

例如,如果将left-indent添加到Table Grid样式中(通过取消注释行),它将应用于段落级别,而不是表级别,从而导致以下结果(不需要):

python - 使用Python的docx库,如何缩进表?-LMLPHP

在Microsoft Word中,可以通过为2.0 cm输入Indent from left在表属性上完成此操作。

最佳答案

基于Fred C's answer,我想出了以下解决方案:

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

def indent_table(table, indent):
    # noinspection PyProtectedMember
    tbl_pr = table._element.xpath('w:tblPr')
    if tbl_pr:
        e = OxmlElement('w:tblInd')
        e.set(qn('w:w'), str(indent))
        e.set(qn('w:type'), 'dxa')
        tbl_pr[0].append(e)

关于python - 使用Python的docx库,如何缩进表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50556604/

10-14 17:38