Активируйте несколько листов в файле Excel с помощью OpenPyxl

Я хотел бы активировать несколько листов в файле 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 или как я могу активировать несколько листов и сохранить их одновременно (это можно сделать индивидуально). Спасибо

Я думаю, что все настройки печати относятся только к отдельным листам. Некоторые настройки принтера хранятся в двоичном объекте, для которого нет API. КСТАТИ. вы можете просто перебрать рабочие листы: for ws in workbook:…

Charlie Clark 16.05.2024 11:08
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать несколько листов активными с помощью 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 будет использовать аналогичные команды.

Другие вопросы по теме

Получите СУММПРОИЗВ с несколькими критериями столбца и строки, если таблица содержит значения, которые не являются числовыми
Получите СУММПРОИЗВ с несколькими критериями столбца и строки и игнорируйте критерии, если ячейка с критериями пуста
Определить имя столбца/номер столбца сортировки в Excel
Найти значение на листе 1, скопировать значение смещения, найти значение смещения на листе 2, вставить текст в ячейку смещения
Заполнение ListBox. «Ошибка выполнения '380': не удалось установить свойство List. Недопустимое значение свойства»
Создает список, содержащий рабочие листы и формулы в них
Как отфильтровать столбец, когда ячейки объединены вместе (Фильтр при объединении ячеек в Excel)
Как я могу перебрать все ячейки в объекте электронной таблицы ColdFusion?
Получить родительский элемент, содержащий строку
Поиск повторяющихся значений в формуле одной ячейки массива