使用 Python 设置 Excel 页眉和页脚

页眉和页脚是打印表格时的重要辅助信息。它们不影响单元格数据,却能在每一页顶部或底部显示文件标题、公司名称、标识或日期,让打印出来的报表更规范、更专业。当一批工作簿需要统一加上相同的页眉页脚时,逐个手工设置显然不现实。

用 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 / RightHeaderLeftFooter / 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 只作用于第一页,LeftHeaderCenterFooter 等则作用于其余页面,两套设置互不干扰。

在页眉页脚中插入图片

把公司 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 等格式代码控制字体和样式;用 DifferentOddEvenDifferentFirst 区分奇偶页与首页;用 LeftHeaderImage 配合 &G 占位符插入图片。掌握这些方法后,可以把打印报表的统一排版交给脚本完成。

相关推荐
步行cgn1 小时前
IoC 控制反转:从概念到 Spring 的实现
后端
databook1 小时前
异常值检测与处理方法总结
python·数据挖掘·数据分析
千里码aicood1 小时前
面向智能助理的多轮医疗对话生成系统开发
python
MC皮蛋侠客1 小时前
OPC UA 系列(一):标准全景与 Python 最小闭环——让第一条设备数据流动起来
开发语言·python·opcua
用户3721574261351 小时前
使用 Python 提取 Word 文档中的表格数据
python
爱勇宝1 小时前
没有 Fn 键关触控板?我做了一个双击即用的 Windows 小工具
前端·后端·程序员
有味道的男人1 小时前
得物详情 API|支持实时价格、成色、鉴别服务数据
windows·python·api
小溪学编程1 小时前
Java BufferedReader 详解:从基础用法到性能优化
java·python·性能优化
2601_962300472 小时前
基于Python与Tkinter的ADB Monkey自动化测试脚本开发
python·adb·tkinter·android测试·gui自动化