使用 Python 设置 Excel 页眉和页脚

文章来源声明: 原文作者:用户835629078051; 来源站点:掘金; 原文链接:https://juejin.cn/post/7684080599313743906; 本文基于上述来源整理/加工,觅优补充点评,仅供技术学习交流。版权归原作者所有。
觅优短评

适合需要批量生成或统一打印报表的 Python 开发者,六区域加格式代码的方案能一次覆盖文字、样式与 Logo 需求,注意在页面布局视图校验效果并及时释放资源。

![使用 Python 在 Excel 中设置页眉和页脚](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/931f5c0bab6f46e7b183b6312cbf2616~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3ODM1NjI5MDc4MDUx:q75.awebp?rk3s=f64ab15b&x-expires=1789726759&x-signature=02PpYvQhRmzrgu4QP0%2FmCJFKizg%3D)

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

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

在页眉页脚中插入图片

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