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

如何用Python XlsxWriter实现多工作表页脚的独立页码(Page x of n)

问题:XlsxWriter生成PDF时各工作表页码无法独立从1开始计数

我用Python写了个程序,循环处理包含多案例的DataFrame,生成Excel后转PDF。核心代码如下:

创建工作簿:

file_stream = io.BytesIO()
writer = pd.ExcelWriter(file_stream, engine='xlsxwriter')
workbook = writer.book

遍历DataFrame创建工作表并设置页脚:

for index, row in case_df.iterrows():
    for column in case_df.columns:
        if row['Case No']!=current_case_no:
            current_case_no=row['Case No']
            footer=f'&C{agency} - Case No. {current_case_no}  Page &P of &N'
            worksheet = workbook.add_worksheet(f'{current_case_no}')
            worksheet.set_paper('Letter')
            worksheet.set_margins(top=.5, bottom=.5, left=.5, right=.5)
            worksheet.set_column(0, 15, 12) 
            worksheet.set_default_row(13)
            worksheet.set_footer(footer)

写入数据后转PDF:

writer.close()
# RESET THE FILE STREAM TO THE BEGINNING
file_stream.seek(0)
pdf_stream = excel_to_pdf_stream(file_stream)

现在生成的PDF里,所有工作表的页码是连续递增的,而不是每个工作表从第1页开始计数。想要通过XlsxWriter设置,让每个新工作表的页码重新从1开始,而且不用手动统计行数和页数。


解决方案

要实现每个工作表页码独立从1开始,只需做以下调整:

  • 在创建每个工作表后,添加一行设置工作表起始页码的代码:

    worksheet.set_page_setup('first_page_number', 1)
    

    这个设置会强制当前工作表的页码从1开始计数,页脚中的&P会显示该工作表的当前页码,&N会自动读取该工作表的总页数,完全不需要手动统计行数或计算页数。

  • 优化循环逻辑(可选):原代码里的内层for column in case_df.columns:属于无效循环,会重复执行Case No判断,建议改成按Case No分组遍历,提升效率:

    current_case_no = None
    for case_no, group_df in case_df.groupby('Case No'):
        if case_no != current_case_no:
            current_case_no = case_no
            footer=f'&C{agency} - Case No. {current_case_no}  Page &P of &N'
            worksheet = workbook.add_worksheet(f'{current_case_no}')
            # 设置页码起始为1
            worksheet.set_page_setup('first_page_number', 1)
            # 格式设置
            worksheet.set_paper('Letter')
            worksheet.set_margins(top=.5, bottom=.5, left=.5, right=.5)
            worksheet.set_column(0, 15, 12) 
            worksheet.set_default_row(13)
            worksheet.set_footer(footer)
            # 写入当前案例的数据
            group_df.to_excel(writer, sheet_name=f'{current_case_no}', index=False)
    

调整后,每个工作表的页码都会从1开始,转PDF时各工作表的页码序列完全独立,页脚的Page X of Y也会准确对应当前工作表的页码和总页数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:05:08