Я хотел бы активировать несколько листов в файле Excel или изменить настройки печати по умолчанию на «Печать всей книги».
Это можно сделать вручную в Excel. Но я хотел бы записать это в файлы автоматически. Предыстория такова: у меня есть файлы Excel с несколькими листами. Их следует распечатать щелчком правой кнопки мыши, т. е. все листы или активные.
Hier mein Ansatz:
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 или как я могу активировать несколько листов и сохранить их одновременно (это можно сделать индивидуально). Спасибо






Вы можете сделать несколько листов активными с помощью 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.
Вы можете сделать что-то подобное и выбрать листы (сделать их активными);
Выберите листы по имени, которые соответствуют критерию, в список, затем «выберите» листы вместе, используя список. В сохраненной книге эти листы будут активны при открытии.
С помощью visible=True вы увидите открытые книги и выбранные листы при выполнении этой части кода.
import xlwings as xw
with xw.App(visible=True) as app:
wb = xw.Book('foo.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('foo.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)
Если вы хотите распечатать всю книгу, просто распечатайте ее без каких-либо выделений;
wb.api.PrintOut(Copies=1)
все листы будут напечатаны.
Win32com будет использовать аналогичные команды.
Я думаю, что все настройки печати относятся только к отдельным листам. Некоторые настройки принтера хранятся в двоичном объекте, для которого нет API. КСТАТИ. вы можете просто перебрать рабочие листы:
for ws in workbook:…