2017-03-16 111 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