页眉和页脚是打印表格时的重要辅助信息。它们不影响单元格数据,却能在每一页顶部或底部显示文件标题、公司名称、标识或日期,让打印出来的报表更规范、更专业。当一批工作簿需要统一加上相同的页眉页脚时,逐个手工设置显然不现实。
用 Python 可以批量、精确地设置 Excel 工作表的页眉页脚,包括文字内容、字体样式、奇偶页差异,以及插入图片。本文以 Spire.XLS for Python 为例介绍这些操作。
环境准备
安装 Spire.XLS 库:
pip install Spire.XLS
在脚本中引入模块:
<span>from</span> spire.xls <span>import</span> *
<span>from</span> spire.xls.common <span>import</span> *
页眉页脚的设置都集中在工作表的 PageSetup 属性上。它把页眉和页脚各分成左、中、右三个区域,分别用 LeftHeader / CenterHeader / RightHeader 和 LeftFooter / CenterFooter / RightFooter 来访问。
设置基本的页眉和页脚
最简单的用法是直接给某个区域赋值文本:
workbook = Workbook()
workbook.LoadFromFile(<span>"报表.xlsx"</span>)
sheet = workbook.Worksheets[<span>0</span>]
<span># 设置左侧页眉</span>
sheet.PageSetup.LeftHeader = <span>"Spire.XLS 示例报表"</span>
<span># 设置中间页脚</span>
sheet.PageSetup.CenterFooter = <span>"页脚文本"</span>
workbook.SaveToFile(<span>"页眉页脚.xlsx"</span>, ExcelVersion.Version2010)
workbook.Dispose()
LeftHeader 对应页眉左侧区域,CenterFooter 对应页脚中间区域。六个区域互相独立,可以按需使用其中的任意几个。
用格式代码控制字体和样式
页眉页脚的文本支持一套格式代码,写在字符串里即可生效。最常用的是字体名称和字号:
<span># &"字体名"&字号 用于指定字体和大小</span>
sheet.PageSetup.LeftHeader = <span>"&\"Arial Unicode MS\"&18 Header Footer Sample"</span>
sheet.PageSetup.RightFooter = <span>"&\"Arial Unicode MS\"&18 Header Footer Sample"</span>
格式代码的写法是 &"字体名"&字号 后紧跟文本内容。除字体和字号外,还有几种常用代码:
&B:加粗,例如&"Arial"&12&B Header;&K+ 颜色码:设置字体颜色,例如&KFFC000;&G:图片占位符,表示在此处插入图片。
把这些代码组合起来,可以做出带样式的页眉页脚,例如:
sheet.PageSetup.OddHeaderString = <span>"&\"Arial\"&12&B&KFFC000 Odd_Header"</span>
这行代码让页眉使用 Arial 字体、12 号、加粗并显示为指定颜色。
奇偶页使用不同的页眉页脚
有些文档希望奇数页和偶数页显示不同的页眉页脚(例如奇数页放标题、偶数页放章节名)。这时先把 DifferentOddEven 设为 1 开启该功能,再分别设置奇偶页的字符串:
sheet.PageSetup.DifferentOddEven = <span>1</span>
<span># 奇数页页眉页脚</span>
sheet.PageSetup.OddHeaderString = <span>"&\"Arial\"&12&B&KFFC000 Odd_Header"</span>
sheet.PageSetup.OddFooterString = <span>"&\"Arial\"&12&B&KFFC000 Odd_Footer"</span>
<span># 偶数页页眉页脚</span>
sheet.PageSetup.EvenHeaderString = <span>"&\"Arial\"&12&B&KFF0000 Even_Header"</span>
sheet.PageSetup.EvenFooterString = <span>"&\"Arial\"&12&B&KFF0000 Even_Footer"</span>
注意启用 DifferentOddEven 后,应使用 OddHeaderString / EvenHeaderString 这一类属性,而不是前面单独的 LeftHeader,否则设置不会按奇偶页区分。
首页使用不同的页眉页脚
封面或首页通常不希望出现与正文相同的页眉页脚。把 DifferentFirst 设为 1,再单独设置首页的内容:
sheet.PageSetup.DifferentFirst = <span>1</span>
<span># 首页的页眉页脚</span>
sheet.PageSetup.FirstHeaderString = <span>"Different First page"</span>
sheet.PageSetup.FirstFooterString = <span>"Different First footer"</span>
<span># 其余页面的页眉页脚</span>
sheet.PageSetup.LeftHeader = <span>"Demo of Spire.XLS"</span>
sheet.PageSetup.CenterFooter = <span>"Footer by Spire.XLS"</span>
FirstHeaderString / FirstFooterString 只作用于第一页,LeftHeader、CenterFooter 等则作用于其余页面,两套设置互不干扰。
在页眉页脚中插入图片
把公司 Logo 放进页眉页脚也很常见。做法是先通过 LeftHeaderImage 等属性指定图片,再把对应区域的文本设为 &G 占位符:
image = Stream(<span>"logo.png"</span>)
<span># 图片页眉:先指定图片,再用 &G 占位</span>
sheet.PageSetup.LeftHeaderImage = image
sheet.PageSetup.LeftHeader = <span>"&G"</span>
<span># 图片页脚</span>
sheet.PageSetup.CenterFooterImage = image
sheet.PageSetup.CenterFooter = <span>"&G"</span>
&G 是固定的图片占位符,图片本身由 LeftHeaderImage 等属性提供,两者配合才完整。
首页图片页眉的设置有专门的方法。以首页左侧为例:
sheet.PageSetup.DifferentFirst = <span>1</span>
imageStream = Stream(<span>"logo.png"</span>)
sheet.PageSetup.SetFirstLeftHeaderImage(imageStream)
sheet.PageSetup.SetFirstLeftFooterImage(imageStream)
sheet.PageSetup.LeftHeader = <span>"Demo of Spire.XLS"</span>
sheet.PageSetup.LeftFooter = <span>"Footer by Spire.XLS"</span>
SetFirstLeftHeaderImage() 和 SetFirstLeftFooterImage() 专门用于首页的图片页眉页脚。
实用提示
- 页眉页脚只有在打印预览或页面布局视图下才可见。用
sheet.ViewMode = ViewMode.Layout可以切换到页面布局视图,方便确认效果。 - 六个区域(页眉左/中/右、页脚左/中/右)相互独立,同一份报表可以只在需要的区域放内容,不必全部填充。
- 格式代码
&"字体名"&字号中的字体名称要加引号,字号写在引号之后,顺序不能颠倒。 - 批量处理时用循环遍历
workbook.Worksheets,为每张工作表套用同一套页眉页脚设置,保持整份工作簿风格统一。 - 处理完及时调用
Dispose()释放资源。
总结
本文介绍了用 Python 设置 Excel 页眉页脚的几种方式:用 PageSetup 的六个区域属性写入文本;用 &"字体"&字号、&B、&K 等格式代码控制字体和样式;用 DifferentOddEven 和 DifferentFirst 区分奇偶页与首页;用 LeftHeaderImage 配合 &G 占位符插入图片。掌握这些方法后,可以把打印报表的统一排版交给脚本完成。
适合需要批量生成或统一打印报表的 Python 开发者,六区域加格式代码的方案能一次覆盖文字、样式与 Logo 需求,注意在页面布局视图校验效果并及时释放资源。