如何使用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
相关产品推荐
相关产品推荐

