使用 OpenPyxl 激活 Excel 文件中的多个工作表

问题描述 投票:0回答:1

我想在 Excel 文件中设置多个活动工作表,或将默认打印设置更改为“打印整个工作簿”。

这可以在 Excel 中手动完成。但我想自动将其写入文件。 背景是这样的:我有多个工作表的Excel文件。这些应该通过右键单击来打印,即所有工作表或活动工作表。

aktive sheets print properties

我的安萨兹:

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)   
    # Einstellungen zum drucken
        ws.print_title_rows = '1:1' # erste Zeile
        # ws.print_title_cols = 'A:A' # erste spalte
        ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE # Querformat
        ws.page_setup.paperSize = ws.PAPERSIZE_A4 # Papiergröße
        ws.sheet_properties.pageSetUpPr.fitToPage = True
        ws.page_setup.fitToHeight = False # alle Zeilen auf einer seite
        ws.page_setup.fitToWidth = True # alle Spalten auf einer seite
        # angaben in INCH
        ws.page_margins.header = 0.393701 # Kopfzeile
        ws.page_margins.footer = 0.0 # Fusszeile
        ws.page_margins.left = 0.393701 # links
        ws.page_margins.right = 0.393701 # rechts
        ws.page_margins.bottom = 0.393701 # unten
        ws.page_margins.top = 0.787402 # oben
    # Kopf unf Fußzeile 
        ws.HeaderFooter.differentFirst = True
    # ws.HeaderFooter.firstFooter.left.text = sheet
        ws.HeaderFooter.firstHeader.right.text = sheet 
wb.active = 0 ############## an dieser Stelle möchte ich alle/bestimmte Blätter auswählen bzw. aktiv setzten, oder, wahrscheinlich in den ws.sheet_properties.pageSetUpPr, die defaulteinstellung auf "Gesamte Arbeitsmappe drucken" umstellen.
wb.save(filename)
wb.close()

有人知道如何实施吗? Openpyxl 中是否有此打印默认设置,或者如何激活多张纸并同时保存它们(可以单独完成)。 谢谢

python excel openpyxl
1个回答
0
投票

您可以使用 Openpyxl 激活多个工作表,但无法使用此模块打印工作表,因此不确定这是否是适合您目的的最佳选择。
但是,如果您确实想这样做,以下代码将会有所帮助。
要将工作表设置为活动状态,您可能需要/想要包含一个条件(基于工作表名称或其他)来确定是否应将工作表设置为活动状态。
保存后,当在 Excel 中打开工作簿时,如果使用“打印活动工作表”,这些工作表将全部被选中,并且将被打印。
请记住,工作簿中的默认活动工作表可能不是您想要选择的工作表,因此可能需要取消选择该工作表。

...
### De-Active-ate the current active Sheet
wb[wb.active.title].views.sheetView[0].tabSelected = False

### Set selected Sheets as Active
for sheet in wb.worksheets:
    if sheet.title <matches required criteria>:
        sheet.views.sheetView[0].tabSelected = True

如果您也想实际打印,则需要使用 Xlwings 或 Win32com 等模块。
您可以执行类似的操作并选择工作表(使它们处于活动状态);
按名称选择与列表中的条件匹配的工作表“选择”这些工作表。保存的工作簿在打开时将使这些工作表处于活动状态。

import xlwings as xw

with xw.App(visible=True) as app:
    wb = xw.Book('foo2.xlsx')


    sheet_list = []
    for s_name in wb.sheet_names:
        if s_name <match criteria>:
            sheet_list.append(s_name)

    wb.api.Sheets(sheet_list).Select()

    wb.save('foo_out.xlsx')

但是,您不需要保存此状态进行打印,您可以在该代码执行中打印选定的工作表。
以下代码将仅打印那些选择到sheet_list列表中的工作表。如果这就是您所需要的全部内容,则无需进行选择并保存工作簿。

import xlwings as xw

with xw.App(visible=True) as app:
    wb = xw.Book('foo2.xlsx')


    sheet_list = []
    for s_name in wb.sheet_names:
        if s_name <match criteria>:
            
            sheet_list.append(s_name)


    wb.api.Sheets(sheet_list).PrintOut(Copies=1)
    
© www.soinside.com 2019 - 2024. All rights reserved.