Generieren Sie eine PDF-Datei aus Excel über Python, ohne Excel zu öffnenPython

Python-Programme
Guest
 Generieren Sie eine PDF-Datei aus Excel über Python, ohne Excel zu öffnen

Post by Guest »

Wir würden PDFs aus Excel über Python generieren. Wir tun dies derzeit mithilfe der Win32com-Bibliothek gemäß dieser Stack Overflow-Antwort. Zusammenfassend rufen wir explizit o = win32com.client.Dispatch("Excel.Application") auf, öffnen eine tatsächliche Excel-Instanz (sichtbar im Task-Manager) und rufen die PDF-Druckfunktion von Excel auf, wb.ActiveSheet.ExportAsFixedFormat( 0, PATH_TO_PDF) und schließlich das Schließen der Excel-Instanz, o.Quit(). Der Hauptnachteil hierbei ist, dass, wenn Excel bereits im System geöffnet ist, der Aufruf von Quit() dazu führt, dass Excel seinen Systemdialog öffnet und Sie auffordert, Änderungen zu speichern, Änderungen zu ignorieren und zu schließen oder abzubrechen. Obwohl wir diesen Fehler in Python abfangen können, scheinen wir die Excel-Instanz danach nicht schließen zu können. Ein Neustart des Python-Programms hilft nicht, da die alte Excel-Instanz noch aktiv ist. Wir müssen es über den Task-Manager unterdrücken, um das Programm erneut ausführen zu können.
Unsere generierte XLSX-Datei hat eine feste Größe, A1:G50. Es enthält 3 Bilder (2 Logos und das Ergebnisdiagramm, wie es von Matplotlib in einer PNG-Datei gespeichert wurde) und ansonsten Text und Zahlen, von denen einige fett formatiert sind.
Ein MRE:

Code: Select all

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
Um das Problem zu reproduzieren, führen Sie das obige Programm mit einer bereits geöffneten Excel-Instanz (in einer beliebigen Arbeitsmappe) aus.
Es wäre gut, dieses Problem zu umgehen , da es nicht praktikabel ist, Benutzer über den Task-Manager anzuweisen, Excel zu schließen. Darüber hinaus führt die Erstellung von Berichten durch mehrere Benutzer in einem zentralen System zu Problemen, wenn zwei oder mehr Aufrufe gleichzeitig Excel-Instanzen öffnen.
Wir haben Python-Lösungen wie Spire.XLS oder ReportLab gefunden, aus denen PDFs generiert werden können Excel-Dokumente, aber das sind ziemlich teure Bibliotheken von Drittanbietern. Da wir über eine gültige Excel-Lizenz verfügen, würden wir diese lieber nutzen.
Wie können wir automatisch PDF-Dokumente aus Excel generieren, ohne Excel explizit öffnen zu müssen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post