Вы можете попробовать обновить настройки макросов в реестре, чтобы разрешить запуск всех макросов. Вам нужно будет либо запустить скрипт Python от имени администратора, либо убедиться, что у ключа реестра есть соответствующие разрешения:
import winreg
import os
import win32com.client
def registry_set_key(hive, regpath, key, type, value):
try:
hkey = winreg.OpenKey(hive, regpath, 0, winreg.KEY_ALL_ACCESS)
except FileNotFountError as e:
hkey = winreg.CreateKey(hive, regpath, 0, winreg.KEY_ALL_ACCESS)
try:
old = winreg.QueryValueEx(hkey, key)
except:
old = None
winreg.SetValueEx(hkey, key, 0, type, value)
winreg.CloseKey(hkey)
return old
if os.path.exists(r"C:\\Users\\siddharth.mungekar\\Desktop\\MemleakTest\\test.xlsm"):
# Set macro settings to 1 to allow all macros
old = registry_set_key(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Office\14.0\Excel\Security', 'VBAWarnings', winreg.REG_DWORD, 1)
xl = win32com.client.Dispatch("Excel.Application")
xl.Workbooks.Open(Filename="C:\\Users\\siddharth.mungekar\\Desktop\\MemleakTest\\test.xlsm")
xl.Visible = True
xl.Run('Mem_Leak')
# If there was an existing value, put it back
if old:
registry_set_key(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Office\14.0\Excel\Security', 'VBAWarnings', winreg.REG_DWORD, old[0])
Обратите внимание, что вам может потребоваться изменить путь к реестру в зависимости от установленной версии Office, используйте REGEDIT для проверки. т.е. убедитесь, что присутствует Office\14.0
.
Также взгляните на Microsoft Project - как управлять настройками макросов с помощью ключей реестра для получения дополнительной информации.