2017-09-27 112 views
1

我試圖到Excel電子表格轉換爲使用Python的PDF和使用此代碼的comtypes包:錯誤時轉換Excel文檔到PDF使用comtypes在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() 

這上面的腳本運行良好和PDF文件但是當我嘗試打開它時,出現錯誤「文件無法打開 - 文件格式有問題」(但在關閉此錯誤對話框後,實際上可以預覽PDF文件)。我已經嘗試了一個類似的腳本來將Word文檔轉換爲PDF文件,這工作得很好。

有關如何通過文件格式錯誤解決此問題的任何想法?

回答

1

找到了解決辦法 - 這似乎是工作:

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() 

這個鏈接也可以是關於參數傳遞給ExportAsFixedFormat功能的靈感有所幫助:Document.ExportAsFixedFormat Method(儘管某些參數的值必須是修改了一下)。

+1

好的解決方案。 ['FileFormat'枚舉不包含任何PDF等價物](https://msdn.microsoft.com/en-us/vba/excel-vba/articles/xlfileformat-enumeration-excel),所以不知道你在哪裏(可能這是一個在不同應用程序的對象模型中列舉的常量,[如Word](https://msdn.microsoft.com/en-us/vba/word-vba/articles/wdsaveformat- enumeration- Word)?)在Excel中,使用SaveAs對話框保存爲PDF實際上調用幕後的'ExportAsFixedFormat'方法,而不是'SaveAs'方法,可能出於上述原因:) –

+1

好的 - 感謝您的評論。關於'17' ...我只是從[這裏]選擇它(https://stackoverflow.com/questions/6011115/doc-to-pdf-using-python)。但是這個數字可能來自您發佈的鏈接。 – Andreas

+0

是的,這是有道理的,我只是添加一些澄清,以防它會對你有幫助(或任何其他人在這個問題上絆倒)。 Word/Excel/PowerPoint /等中的常量值不一樣,所以在一個應用程序中有效(通常但不總是)在其他應用程序中不起作用。無論如何,好的工作解決你自己的問題! –