You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python-docx在Word表格中实现多缩进段落设置

问题原因

你代码中对第三列单元格的段落操作存在逻辑错误:paragraph4 = table_cell4.paragraphs[0]、paragraph5 = table_cell4.paragraphs[0]、paragraph6 = table_cell4.paragraphs[0]这三行把三个变量都指向了同一个段落对象,后续修改paragraph5的缩进本质就是修改这个公共段落的格式,自然所有内容都会受影响。

该需求直接用python-docx原生接口即可实现,无需调用oxml底层接口,修正后的可运行代码如下:

import docx
from docx.shared import Cm, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_ALIGN_VERTICAL

document = docx.Document()
table = document.add_table(rows = 1, cols = 3, style = 'Table Grid')

# 创建第0行
table_rows1 = table.rows[0]
first_merge = table_rows1.cells[0].merge(table_rows1.cells[1])
second_merge = first_merge.merge(table_rows1.cells[2])
table_cell1 = table.rows[0].cells[0]
paragraph = table_cell1.paragraphs[0]
title = paragraph.add_run("TITLE").bold = True
table_cell1.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
table_cell1.vertical_alignment = WD_ALIGN_VERTICAL.CENTER

# 创建第1行
add_rows = table.add_row().cells

table_cell2 = table.rows[1].cells[0]
paragraph2 = table_cell2.paragraphs[0]
data2 = paragraph2.add_run("Lorem")
table.cell(1, 0).width = Cm(5)
table_cell2.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.JUSTIFY

table_cell3 = table.rows[1].cells[1]
paragraph3 = table_cell3.paragraphs[0]
data3 = paragraph3.add_run(':')
table.cell(1, 1).width = Cm(0.5)  # 原设置0宽度会导致显示异常,调整为0.5cm
table_cell3.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.JUSTIFY

table_cell4 = table.rows[1].cells[2]
# 第一个段落:普通正文
paragraph4 = table_cell4.paragraphs[0]
data4 = paragraph4.add_run("Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum")
paragraph4.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
# 新增第二个段落:一级列表项
paragraph5 = table_cell4.add_paragraph()
data5 = paragraph5.add_run("1. Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum")
paragraph5.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
paragraph5.paragraph_format.left_indent = Cm(0.5)
paragraph5.paragraph_format.first_line_indent = Cm(-0.9)
# 新增第三个段落:二级列表项
paragraph6 = table_cell4.add_paragraph()
data6 = paragraph6.add_run("a. Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum")
paragraph6.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
paragraph6.paragraph_format.left_indent = Cm(1)
paragraph6.paragraph_format.first_line_indent = Cm(-0.9)

table.cell(1, 2).width = Cm(11)  # 原设置40cm远超A4纸最大宽度,调整为合理值

document.save('asdfasdf.docx')

你可以根据自己的排版需求,调整各段落的left_indent和first_line_indent参数值,达到你预期的缩进效果。

内容的提问来源于stack exchange,提问作者Python Beginner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:57:03