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

如何在python-docx中实现有序列表编号重启?

解决python-docx中编号列表重启的问题

python-docx默认会复用同一个编号规则,所以后续列表会自动延续之前的编号。要实现编号重启,有两种常用方法:

方法一:创建独立的编号样式(适合多次复用)

通过新增一个基于默认编号样式的自定义样式,修改其编号起始值,这样每次需要重启编号时直接用这个样式即可:

from docx import Document
from docx.enum.style import WD_STYLE_TYPE

doc = Document()

# 添加列表1标题和项目
doc.add_paragraph("列表1", style="Heading 2")
for i in range(3):
    doc.add_paragraph(f"列表1项{i+1}", style="List Number")

# 添加列表2标题
doc.add_paragraph("列表2", style="Heading 2")

# 创建新的重启编号样式
restart_style = doc.styles.add_style("Restarted Number List", WD_STYLE_TYPE.PARAGRAPH)
restart_style.base_style = doc.styles["List Number"]

# 修改新样式的编号起始为1
numbering_part = doc.part.numbering_part
num_id = restart_style._element.numId.val
num_def = numbering_part.numbering_definitions._get_num(num_id)
num_def.add_lvlOverride(ilvl=0).add_start(1)

# 使用新样式添加列表2项目
for i in range(3):
    doc.add_paragraph(f"列表2项{i+1}", style="Restarted Number List")

doc.save("restarted_lists.docx")

方法二:直接修改段落的编号起始(适合单次使用)

如果只需要重启一次编号,可以直接给新列表的第一个段落设置编号起始值,后续段落会自动沿用这个新的编号序列:

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

doc = Document()

# 列表1部分
doc.add_paragraph("列表1", style="Heading 2")
for i in range(3):
    doc.add_paragraph(f"列表1项{i+1}", style="List Number")

# 列表2部分
doc.add_paragraph("列表2", style="Heading 2")
# 添加第一个项目并修改编号起始
first_para = doc.add_paragraph("列表2项1", style="List Number")
num_pr = first_para._element.get_or_add_pPr().get_or_add_numPr()
start_elem = OxmlElement('w:start')
start_elem.set(qn('w:val'), '1')
num_pr.append(start_elem)

# 后续项目自动延续新编号
doc.add_paragraph("列表2项2", style="List Number")
doc.add_paragraph("列表2项3", style="List Number")

doc.save("restarted_lists.docx")

内容的提问来源于stack exchange,提问作者CJ Conti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:02:44