2017-09-27 3 views
1

Ich versuche, eine Excel-Tabelle in PDF zu konvertieren Python und das comtypes Paket mit diesem Code:Fehler beim Konvertieren von Excel-Dokument in der PDF comtypes in Python

import os 
import comtypes.client 

FORMAT_PDF = 17 
SOURCE_DIR = 'C:/Users/IEUser/Documents/jscript/test/resources/root3' 
TARGET_DIR = 'C:/Users/IEUser/Documents/jscript' 

app = comtypes.client.CreateObject('Excel.Application') 
app.Visible = False 

infile = os.path.join(os.path.abspath(SOURCE_DIR), 'spreadsheet1.xlsx') 
outfile = os.path.join(os.path.abspath(TARGET_DIR), 'spreadsheet1.pdf') 

doc = app.Workbooks.Open(infile) 
doc.SaveAs(outfile, FileFormat=FORMAT_PDF) 
doc.Close() 

app.Quit() 

Dieses Skript oben läuft gut und die pdf-Datei ist erstellt, aber wenn ich versuche, es zu öffnen, erhalte ich den Fehler "Die Datei kann nicht geöffnet werden - es gibt ein Problem mit dem Dateiformat" (aber nach dem Schließen dieses Fehlerdialogs ist es tatsächlich möglich, eine Vorschau der PDF-Datei). Ich habe ein ähnliches Skript ausprobiert, um Word-Dokumente in PDFs zu konvertieren, und das funktionierte gut.

Irgendwelche Ideen, wie ich dieses Problem mit dem Dateiformatfehler beheben kann?

Antwort

1

eine Lösung gefunden - dies scheint zu funktionieren: Document.ExportAsFixedFormat Method (obwohl einige der Werte der Argumente zu haben:

import os 
import comtypes.client 

SOURCE_DIR = 'C:/Users/IEUser/Documents/jscript/test/resources/root3' 
TARGET_DIR = 'C:/Users/IEUser/Documents/jscript' 

app = comtypes.client.CreateObject('Excel.Application') 
app.Visible = False 

infile = os.path.join(os.path.abspath(SOURCE_DIR), 'spreadsheet1.xlsx') 
outfile = os.path.join(os.path.abspath(TARGET_DIR), 'spreadsheet1.pdf') 

doc = app.Workbooks.Open(infile) 
doc.ExportAsFixedFormat(0, outfile, 1, 0) 
doc.Close() 

app.Quit() 

Dieser Link auch als Inspiration in Bezug auf die Argumente der ExportAsFixedFormat Funktion kann hilfreich sein etwas modifiziert).

+1

Gute Lösung. Die [FileFormat-Aufzählung enthält keine PDF-Entsprechung] (https://msdn.microsoft.com/en-us/vba/excel-vba/articles/xlfileformat-enumeration-excel), also nicht sicher, wo Sie hinkommen der '17'-Wert (möglicherweise ist dies eine Konstante, die im Objektmodell einer anderen Anwendung aufgelistet wird, [wie Word] (https://msdn.microsoft.com/en-us/vba/word-vba/articles/wdsaveformat-enumeration- Wort)?) In Excel, das SaveAs-Dialogfeld zu verwenden, um als PDF zu speichern, ruft tatsächlich die 'ExportAsFixedFormat'-Methode hinter den Kulissen auf, nicht die' SaveAs'-Methode, wahrscheinlich aus dem oben genannten Grund :) –

+1

Ok - danke für deinen Kommentar. Über die '17' ... habe ich es einfach von [hier] abgeholt (https://stackoverflow.com/questions/6011115/doc-to-pdf-using-python). Aber die Nummer kommt wahrscheinlich von dem Link, den du gepostet hast. – Andreas

+0

Ja, das macht Sinn, ich habe nur eine Erläuterung hinzugefügt, falls es für Sie (oder irgendjemanden, der auf diese Frage stolpert) hilfreich wäre. Die konstanten Werte sind nicht identisch zwischen Word/Excel/PowerPoint/etc., Also funktioniert in einer Anwendung (oft, aber nicht immer) nicht in anderen. In jedem Fall, gute Arbeit, Ihre eigene Frage zu lösen! –

Verwandte Themen