You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用OpenPyxl激活多工作表或设置默认打印整个工作簿?

问题

我需要通过OpenPyxl实现两个需求:

  1. 设置Excel文件中的多个工作表为激活状态
  2. 将默认打印设置改为“打印整个工作簿”

手动在Excel里能完成这些操作,但我要自动化处理一批含多工作表的Excel文件,希望右键打印时可以选择打印全部或已激活的工作表。以下是我的尝试代码:

from openpyxl import Workbook,load_workbook
from openpyxl.styles import Alignment

wb = load_workbook(filename)
sheets = wb.sheetnames
for sheet in sheets:
    ws = wb[sheet]  
    alig = Alignment(horizontal='left', vertical='top',wrapText=True, shrinkToFit = True)   
    # 打印设置
    ws.print_title_rows = '1:1' # 第一行
    # ws.print_title_cols = 'A:A' # 第一列
    ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE # 横向
    ws.page_setup.paperSize = ws.PAPERSIZE_A4 # A4纸
    ws.sheet_properties.pageSetUpPr.fitToPage = True
    ws.page_setup.fitToHeight = False # 所有行不缩至一页
    ws.page_setup.fitToWidth = True # 所有列缩至一页
    # 单位:英寸
    ws.page_margins.header = 0.393701 # 页眉
    ws.page_margins.footer = 0.0 # 页脚
    ws.page_margins.left = 0.393701 # 左边距
    ws.page_margins.right = 0.393701 # 右边距
    ws.page_margins.bottom = 0.393701 # 下边距
    ws.page_margins.top = 0.787402 # 上边距
    # 页眉页脚设置
    ws.HeaderFooter.differentFirst = True
    # ws.HeaderFooter.firstFooter.left.text = sheet
    ws.HeaderFooter.firstHeader.right.text = sheet 
wb.active = 0 ############## 此处我希望选择或激活所有/指定工作表,或在ws.sheet_properties.pageSetUpPr中将默认设置改为“打印整个工作簿”。
wb.save(filename)
wb.close()

请问如何实现这两个功能?OpenPyxl是否支持设置该打印默认项,或者如何同时激活多个工作表并保存?

解决方案

1. 同时激活多个工作表

OpenPyxl本身没有直接提供激活多个工作表的API——因为.xlsx文件格式仅支持标记单个默认激活工作表,多表选中属于Excel应用的交互状态,不会被存储在文件里。

如果要实现类似效果,只能通过修改xlsx文件的底层XML:

  1. 将保存后的xlsx文件解压缩
  2. 找到xl/workbook.xml文件,修改<bookViews>节点,给需要激活的工作表对应的<sheetView>添加tabSelected="true"属性
  3. 重新压缩为xlsx文件
    这种方法操作繁琐,且后续打开Excel时,多表选中状态只会在首次打开时保留。

2. 设置默认打印为“打印整个工作簿”

OpenPyxl不支持直接设置这个选项——“默认打印整个工作簿”是Excel应用的用户界面偏好,不属于xlsx文件本身的存储属性,无法通过OpenPyxl写入到文件中。

有两种替代方案:

  • 直接自动化打印整个工作簿:如果不需要依赖右键交互,用win32com.client调用Excel COM接口直接实现打印:
import win32com.client as win32

excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(filename)
# 直接打印整个工作簿
wb.PrintOut()
wb.Close(SaveChanges=False)
excel.Quit()
  • 保留右键交互的提示方案:在Excel文件中添加说明文本或VBA宏,提示用户右键打印时手动选择“整个工作簿”选项。

内容的提问来源于stack exchange,提问作者notapro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:57:35