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