如何用OpenPyxl激活多工作表或设置默认打印整个工作簿?
问题
我需要通过OpenPyxl实现两个需求:
- 设置Excel文件中的多个工作表为激活状态
- 将默认打印设置改为“打印整个工作簿”
手动在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:
- 将保存后的xlsx文件解压缩
- 找到
xl/workbook.xml文件,修改<bookViews>节点,给需要激活的工作表对应的<sheetView>添加tabSelected="true"属性 - 重新压缩为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
相关产品推荐
相关产品推荐

