Я пытаюсь создать скрипт Python (я использую Python 3.7.3 с кодировкой UTF-8 в 64-битной Windows 10 с Microsoft Office 365), который экспортирует выбранные пользователем рабочие листы в PDF после того, как пользователь выбрал Excel-файлы.
Excel-файлы содержат множество различных настроек для настройки страницы, и каждый лист в каждом Excel-файле имеет свои настройки страницы.
Поэтому задача состоит в том, чтобы мне нужно было прочитать все текущие переменные, относящиеся к настройке страницы, чтобы иметь возможность назначить их связанным переменным для экспорта.
Проблема в том, что я пытаюсь заставить Excel вернуть текущую область печати листа, которую я не могу понять.
Насколько я понимаю, мне нужно иметь возможность прочитать текущую область печати и установить ее для экспорта.
Excel-файлы представляют собой смесь ".xlxs" и ".xlsm".
Я пытался использовать все виды различных методов из документации Excel VBA, но до сих пор ничего не получалось, например. добавив ".Range" и ".Address" и т. д.
Я также попробовал ".UsedRange", но я не могу найти значительную разницу в ячейках, которые могу искать, и не могу отформатировать их определенным образом, поэтому я не могу использовать это.
Я также пытался использовать переменную "IgnorePrintAreas = False" в функции "ExportAsFixedFormat", но это тоже не сработало.
#This is some of the script.
#I've left out irrelevant parts (dialogboxes etc.) just to make it shorter
#Import pywin32 and open Excel and selected workbook.
import win32com.client as win32
excel = win32.gencache.EnsureDispatch("Excel.Application")
excel.Visible = False
wb = excel.Workbooks.Open(wb_path)
#Select the 1st worksheet in the workbook
#This is just used for testing
wb.Sheets([1]).Select()
#This is the line I can't get to work
ps_prar = wb.ActiveSheet.PageSetup.PrintArea
#This is just used to test if I get the print area
print(ps_prar)
#This is exporting the selected worksheet to PDF
wb.Sheets([1]).Select()
wb.ActiveSheet.ExportAsFixedFormat(0, pdf_path, Quality = 0, IncludeDocProperties = True, IgnorePrintAreas = False, OpenAfterPublish = True)
#This closes the workbook and the Excel-file (although Excel sometimes still exists in Task Manager
wb.Close()
wb = None
excel.Quit()
excel = None
Если я оставлю код, как указано выше, и попытаюсь открыть тестовый файл Excel (.xlxs) с небольшой областью PrintArea (A1: H8), функция печати просто выдаст мне пустую строку.
Если я добавлю что-то в .PrintArea (как упомянуто выше), я получу 1 из 2 ошибок:
"Ошибка типа: объект 'str' не может быть вызван".
или
"ps_prar = wb.ActiveSheet.PageSetup.PrintArea.Range
AttributeError: у объекта 'str' нет атрибута 'Range' '
Я надеюсь, что кто-то может мне помочь в этом вопросе - заранее спасибо.