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
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?