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

使用python-docx生成docx时,如何让分页后编号列表重新计数?

解决python-docx中每页编号列表重新从1计数的问题

默认情况下,python-docx使用的列表样式会全局连续计数,跨页后不会自动重置。要实现每页的编号列表都从1开始,核心是在每一页的第一个列表项上强制设置编号起始值为1,具体代码修改如下:

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

document = Document()
pages = [...]                      # 你的页面内容列表
for page in pages:
    document.add_paragraph("页面开头文本")  # 添加页面开头的普通文本
    items = get_items(page)
    
    if items:
        # 处理第一个列表项,重置编号起始值为1
        first_item = items[0]
        p = document.add_paragraph(first_item, style='List Number 2')
        # 获取段落的编号属性节点
        num_pr = p._element.get_or_add_numPr()
        # 创建并添加起始值设置元素
        start_element = OxmlElement('w:start')
        start_element.set(qn('w:val'), '1')
        num_pr.append(start_element)
        
        # 处理剩余列表项,直接使用样式即可自动续号
        for item in items[1:]:
            document.add_paragraph(item, style='List Number 2')
    
    document.add_paragraph("页面结尾文本")  # 添加页面结尾的普通文本
    document.add_page_break()      # 添加分页符

document.save("output.docx")               # 保存文档

关键说明

  • 直接操作OXML元素是因为python-docx的高层API没有暴露编号起始值的设置接口,通过底层XML节点修改可以实现需求
  • 只需要在每页的第一个列表项上设置起始值,后续的列表项会自动沿用这个编号序列,从1开始递增
  • 不管是内置的List Number系列样式还是自定义列表样式,这个方法都适用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:12:31