2017-03-16 47 views
0

我最近開始使用python 3.6(槽Anaconda),所以我很抱歉,如果下面的結果不明確。情況如下:python打開最新的excel文件

我有一個excel文件,我用它來運行宏以獲取先知的結果。我的宏很好用,但不幸的是,經過幾次使用後,excel達到了內存限制,我無法再提取結果。解決問題的方法是關閉excel然後再打開它。

爲此,在同一個vba宏中,我打開一個python腳本,它允許我運行宏,保存excel文件,關閉並再次打開它。宏是以下:

import win32com.client 
object = win32com.client.Dispatch('Excel.Application') 
object.visible=1 
object.Run("Central_Run") 
print("Macro ran successfully!") 
print("Active WB:", object.ActiveWorkbook.Name) 
for wb in object.Workbooks: 
print("WB:",wb.Name) 
wb.Save() 
#The loop above saves all the workbooks that are open 
object.quit() 
#Open the Excel file again 
object=win32com.client.Dispatch('Excel.Application') 
wb=object.Workbooks.open(‘myfile.xlsm') 

該腳本,不過,我想打開Excel文件,在腳本的第二部分,沒有指定其名稱(WB = object.Workbooks.open(」 myfile.xlsm')),以便我可以使用其他類似excel文件具有不同名稱的代碼。我的想法是打開最新使用的Excel文件或將腳本鏈接到我的Excel文件中的特定單元格,以便我只需修改該單元格而不是腳本,但不幸的是,我無法做到它。 在此先感謝您的幫助! :)

+0

不知道你想要做什麼。你想打開一個空白的電子表格,然後從其他電子表格中複製一個宏嗎? – Amorpheuses

+0

嗨。對不起,以上不清楚。步驟應該如下: 1)打開包含2個宏的excel工作表;第一個打開python,第二個從Prophet中提取結果(文件名爲「myfile.xlsm」) 2)運行宏打開Python腳本(腳本在上面的問題中); 3)使用Python腳本,我在第一點的excel中運行宏。在同一個腳本中,我保存並關閉了我打開的每個excel工作表。 4)在宏的最後部分,我想再次打開第1點的Excel文件,而不使用它的名稱(「myfile.xlsm」)。 – FioravanteL

+0

主要目的是爲每個不同的excel文件使用python腳本,而不必在每次將其調整爲excel文件時更改代碼(在我定義excel文件名稱的部分)。 – FioravanteL

回答

0

你可以用這個替換您的第二個print語句:

wbName=object.ActiveWorkbook.Name 
print("Active WB:", wbName) 

,然後用替換最後一行:

wb=object.Workbooks.open(wbName) 
+0

嗨。非常感謝您的迴應!它適用於原始文件!但是,我想將腳本應用到一個名爲「myfile - Copy.xlsm」的新的excel文件(只是原始excel的一個副本)。這樣做,我收到以下錯誤: com_error:(-2147352567,'發生異常',(0,'myfile - Copy.xlsm'找不到。檢查文件名的拼寫,並驗證文件位置是正確的。\ n \ n如果您嘗試從最近使用的文件列表中打開該文件,請確保該文件未被重命名,移動或刪除。「,'xlmain11.chm',0, - 2146827284),無) – FioravanteL

+0

可能這是由於這樣一個事實,即在定義wbName之後,我有一行退出對象(object.quit)? – FioravanteL