2011-06-08 636 views
3

這是我第一次使用這個,所以要友好:)基本上我的問題是我正在製作一個程序,用於打開許多Microsoft Word 2007文檔並從該文檔的某個表中讀取並寫入該信息的Excel文件有超過1000字的文檔。我有所有這些工作,但唯一的問題是,當我運行我的代碼時,它並沒有在打開每個文檔後關閉MSword,我必須在程序結束時通過打開單詞並從主菜單中選擇退出字選項來手動執行此操作。另一個問題是,如果在第二次運行時連續運行該程序,則所有事情都會進入地獄,無論選擇哪個文檔,它都會重複打印相同的內容。我認爲這可能與MSword如何決定哪個文檔處於活動狀態有關。它是否仍然打開上次運行未關閉的最後一個活動文檔。反正這是我的打開和關閉部分代碼我不會,你們孔,其餘::使用Python退出Word文檔的問題

MSWord = win32com.client.Dispatch("Word.Application") 
MSWord.Visible = 0 
# Open a specific file 
#myWordDoc = tkFileDialog.askopenfilename() 
MSWord.Documents.Open("C:\\Documents and Settings\\fdosier" + chosen_doc) 
#Get the textual content 
docText = MSWord.Documents[0].Content 
charText = MSWord.Documents[0].Characters 
# Get a list of tables 
ListTables = MSWord.Documents[0].Tables 

------Main Code--------- 

MSWord.Documents.Close 
MSWord.Documents.Quit 
del MSWord 
+1

你的真實代碼有缺失'「嗎?? – Nix 2011-06-08 12:55:20

+0

沒有沒有大聲笑感謝 – 2011-06-08 13:27:29

+0

謝謝所有我找到了解決這個問題的方法是通過將SaveChanges選項設置爲-2(即時保存提示雖然mdsn網站說這是可選的s s MSWord.Documents.Close(SaveChanges = -2) MSWord.Quit – 2011-06-08 13:52:39

回答

1

基本上,Python是不是VBA,所以這樣的:

MSWord.Documents.Close 

相當於:

getattr(MSWord.Documents, "Close") 

即你只是得到一些方法對象,並沒有做任何事情。您需要呼叫調用操作方法(括號:):

MSWord.Documents.Close() 

因此對於.Quit

+0

這是正確的正確答案我會投票它,但不能但哈哈感謝雖然 – 2011-06-08 15:42:37

1

之前你MSWord.Quit做你嘗試使用:

MSWord.ActiveWindow.Close 

甚至更​​多simpley剛做

MSWord.Quit 

我真的不明白,如果你試圖關閉文件或應用程序。

+0

我不確定自己實際上是如果我運行這個程序,一旦它運行正常,但打開Microsft單詞後選擇選項EXit Word它關閉數百如果我不這樣做的話,它以前打開過的文件下次我運行同一個程序時,它會執行上面提到的兩種操作之一,或者生成IOError [被另一程序拒絕使用的權限]或者沿着這些線路生成IOError。我只是希望WOrd以某種方式發佈文檔 – 2011-06-08 13:34:00

+0

btw我嘗試了你上面說的它沒有工作 – 2011-06-08 13:34:34

+0

它真的很難理解你正在做什麼來讓'數百'字文檔打開......你可能想要解釋那一塊。當你關閉你的文件時,它會要求保存嗎? – Nix 2011-06-08 13:37:54

0

我認爲你需要一個MSWord.Quit末(的德爾之前和/或代替)

+0

感謝看來你是正確的德爾是不需要的,除了關閉所有的鬆散結束我認爲德爾刪除我創建的變量 – 2011-06-08 14:06:38