我的知识记录

Python Excel设置打印区域页眉页脚:打印前一键排版

用openpyxl设置print_area打印区域、页眉页脚内容、纸张方向和缩放,导出的表直接打印不用再调页面。

场景痛点

表里有几十列,领导要打印出来开会用。手动点「页面布局」调打印区域、加页眉公司名、加页脚页码,每张表都点一遍。用 openpyxl 在导出时把这些页面设置一起写进去,打开直接 Ctrl+P 就能打,不用再调。

用到的库

pip install openpyxl

完整代码

from openpyxl import load_workbook
from openpyxl.worksheet.page import PageMargins


def setup_print(file_path: str) -> None:
wb = load_workbook(file_path)
ws = wb.active

# 1) 设置打印区域:只打印 A1 到最后一列最后一行
last_col = ws.cell(row=1, column=ws.max_column).column_letter
ws.print_area = f"A1:{last_col}{ws.max_row}"

# 2) 纸张方向横向、A4、适应一页宽
ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE
ws.page_setup.paperSize = ws.PAPERSIZE_A4
ws.page_setup.fitToWidth = 1   # 缩放到 1 页宽
ws.page_setup.fitToHeight = 0  # 高度自动多页
ws.sheet_properties.pageSetUpPr.fitToPage = True

# 3) 页眉:左边公司名,中间标题,右边日期
ws.oddHeader.left.text = "XX科技有限公司"
ws.oddHeader.left.size = 10
ws.oddHeader.center.text = "销售明细报表"
ws.oddHeader.center.size = 12
ws.oddHeader.center.bold = True
ws.oddHeader.right.text = "&D"  # &D 是 Excel 内置日期变量

# 4) 页脚:中间页码 / 总页数
ws.oddFooter.center.text = "第 &P 页 / 共 &N 页"
ws.oddFooter.right.text = "机密"

# 5) 每页都打印表头(打印标题行)
ws.print_title_rows = "1:1"

# 6) 页边距
ws.page_margins = PageMargins(left=0.5, right=0.5, top=0.75,
bottom=0.75, header=0.3, footer=0.3)

wb.save(file_path)
print("打印设置已写入")


if __name__ == "__main__":
setup_print(r"D:\reports\销售明细.xlsx")

代码讲解

  • ws.print_area = "A1:G100" 限定打印范围,范围外的格子不会被打印。
  • ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE 横向打印;PAPERSIZE_A4 指定 A4 纸。
  • fitToWidth=1, fitToHeight=0 把所有列缩放到一页宽,行数不够再自动多页;记得 fitToPage = True 才生效。
  • oddHeader.left/center/right 分别控制页眉左中右;oddFooter 同理。
  • 页眉页脚里 &D 是日期、&P 当前页、&N 总页数、&A 工作表名,这些是 Excel 内置变量。
  • ws.print_title_rows = "1:1" 让每一页顶部都重复打印第 1 行表头,长表打印必备。
  • PageMargins 设页边距,单位是英寸。

运行结果

打开文件,Ctrl+P 预览:横向 A4,所有列缩在一页宽,每页顶部都有表头;页眉显示公司名和报表标题,页脚显示「第 X 页 / 共 N 页」。

注意事项

  • fitToPage 必须设成 True,否则 fitToWidthfitToHeight 不生效。
  • 页眉页脚里的特殊变量以 & 开头,不要写错成中文符号。
  • 打印区域如果包含空列空行,预览会出现空白页,先跑一遍「删除空行空列」再设打印区域。
  • 页眉页脚字体大小通过 .size 设置,颜色、加粗同理。
  • WPS 和 Excel 都能识别这些设置,但个别旧版 WPS 对 fitToPage 支持略有差异,打印前预览一眼最稳。

Python Excel设置打印区域页眉页脚:打印前一键排版

标签:

更新时间:2026-09-15 09:04:18

上一篇:Python Excel 读取合并单元格真实值方法

下一篇:Python Excel数据透视表 pandas实现