Печатать определенные листы из документа Excel в PDF с помощью Python (xlwings)

Я пытаюсь автоматизировать очень ручной процесс индивидуального выбора диапазона рабочих листов в файле Excel для PDF. Мне удалось связать следующий код, который успешно распечатывает документ. Однако я не могу понять, как выбрать конкретные листы в моей книге, поэтому в настоящее время он распечатывает всю книгу в PDF (что составляет целых 897 страниц).

Есть идеи, как выбрать определенные страницы и затем распечатать их в PDF с заданным именем файла?

import os
import xlwings as xw

book = xw.Book(r'linktomyfile.xlsm')
sheet = book.sheets[0]

current_work_dir = os.getcwd()
pdf_path = os.path.join(current_work_dir, "Report_Date.pdf")

print(f"Saving workbook as '{pdf_path}' ...")
book.api.ExportAsFixedFormat(0, pdf_path)

print(f"Opening PDF file with default application")

Очень признателен!


person Tyler Watson    schedule 12.11.2020    source источник


Ответы (2)


Вы можете просто использовать ссылку на лист для печати в PDF, например:

book = xw.Book(r'linktomyfile.xlsm')
sheet = book.sheets("Sheet1")

current_work_dir = os.getcwd()
pdf_path = os.path.join(current_work_dir, "Report_Date.pdf")

sheet.api.ExportAsFixedFormat(0, pdf_path)

Вы также можете указать диапазон, например

sheet.range("A1:G15").api.ExportAsFixedFormat(0, pdf_path)

Пример перебора отдельных листов:

sheetlist = ["Sheet A", "Sheet B"]
for each in sheetlist:
    pdf_path = os.path.join(current_work_dir, f"{each}.pdf")
    sht = book.sheets(each)
    sht.api.ExportAsFixedFormat(0, pdf_path)

Здесь каждый PDF-файл назван по имени листа.

person West    schedule 13.11.2020
comment
Где я могу найти подходящую документацию для этого метода API? - person olenscki; 10.12.2020
comment
@olenscki api просто предоставляет доступ к методам Excel VBA, так что это так же, как если бы вы пишете VBA, но с синтаксисом python. Если в xlwings нет метода, вы просто посмотрите, как это делается в VBA, либо записав макрос, либо выполнив поиск в документации Microsoft vba, а затем вы попытаетесь перевести это в синтаксис Python. Документация vba расскажет вам обо всех параметрах, связанных с методом. - person West; 10.12.2020
comment
@olenscki U добро пожаловать :) - person West; 10.12.2020

В более новой версии xlwings есть встроенная функция .to_pdf (). Предположим, у вас есть книга или лист, готовый к печати:

# to print a whole workbook
myXlwingsWorkBook.to_pdf(r"c:\myOutputPath")
# print a sheet
myXlwingsSheet.to_pdf(r"c:\myOutputPath")

Документация: документация Xlwings - затем выполните поиск в формате PDF.

Есть несколько вариантов. Хотел бы я просто распечатать / pdf первую страницу ...

person DrWhat    schedule 02.08.2021