Создайте PDF-файл из Excel через Python, не открывая Excel.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Создайте PDF-файл из Excel через Python, не открывая Excel.

Сообщение Anonymous »

Мы создавали PDF-файлы из Excel через Python. В настоящее время мы делаем это, используя библиотеку Win32com, как указано в этом ответе на переполнение стека. Таким образом, мы явно вызываем o = win32com.client.Dispatch("Excel.Application"), открываем реальный экземпляр Excel (видимый в диспетчере задач), вызываем возможность печати PDF-файлов Excel, wb.ActiveSheet.ExportAsFixedFormat( 0, PATH_TO_PDF) и, наконец, закрыв экземпляр Excel, o.Quit(). Основным недостатком здесь является то, что если Excel уже открыт в системе, вызов Quit() заставляет Excel открыть системный диалог с просьбой сохранить изменения, игнорировать изменения и закрыть или прервать работу. Хотя мы можем обнаружить эту ошибку в Python, похоже, мы не сможем закрыть экземпляр Excel после того, как это произойдет. Перезапуск программы Python не помогает, поскольку старый экземпляр Excel все еще жив. Нам нужно подавить его через диспетчер задач, чтобы иметь возможность снова запустить программу.
Наш сгенерированный файл XLSX имеет фиксированный размер: A1:G50. Он содержит 3 изображения (2 логотипа и график результатов, сохраненные в файл PNG с помощью matplotlib), а также текст и цифры, некоторые из которых выделены жирным шрифтом.
MRE:

Код: Выделить всё

def save_as_pdf(ExcelInstance, path_to_pdf):
wb_path = r'~/path_to_xlsx/workbook.xlsx'
wb = ExcelInstance.Workbooks.Open(wb_path)

print_area = 'A1:G50'

ws = wb.Worksheets[0]
ws.PageSetup.Zoom = False
ws.PageSetup.FitToPagesTall = 1
ws.PageSetup.FitToPagesWide = 1
ws.PageSetup.PrintArea = print_area

wb.WorkSheets([1]).Select()
wb.ActiveSheet.ExportAsFixedFormat(0, path_to_pdf)

wb.Close(False)

o = win32com.client.Dispatch("Excel.Application")
o.Visible = False
save_as_pdf(o, path_to_pdf)
o.Quit()
del o
Чтобы воспроизвести проблему, запустите указанную выше программу с уже открытым экземпляром Excel (в любой произвольной книге).
Было бы хорошо обойти эту проблему , поскольку требовать от пользователей закрыть Excel через диспетчер задач практически невозможно. Кроме того, если несколько пользователей создают отчеты в централизованной системе, возникают проблемы, если два или более вызовов одновременно открывают экземпляры Excel.
Мы нашли решения Python, такие как Spire.XLS или ReportLab, для создания PDF-файлов из Документы Excel, но это довольно дорогие сторонние библиотеки. Учитывая, что у нас есть действующая лицензия Excel, мы бы предпочли использовать ее.
Как мы можем автоматически создавать PDF-документы из Excel без необходимости явно открывать Excel?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ning-excel
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Создайте PDF-файл из Excel через Python, не открывая Excel.
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Отправьте PDF-файл в Acrobat Reader, чтобы распечатать его, не открывая/не показывая окно.
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как воспроизводить mp3-файлы с помощью Python, открывая канал передачи данных?
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как запустить приложение Python 3 Tkinter, не открывая окна терминала в Mac OS X?
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как запустить приложение Python 3 Tkinter, не открывая окна терминала в Mac OS X?
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»