Как я могу добавить XLA в Excel через python, используя win32com.client? - PullRequest
0 голосов
/ 07 января 2019

Мне нужно запускать макросы в файле Excel, что можно сделать через python win32. Но у меня есть сторонняя надстройка Excel, необходимая для запуска макросов. Excel, который открывается через win32, не имеет связанных надстроек. Надстройка в формате файла XLA.

Это мой код

new_file_path = path to excel_file.xlsm
xl = win32com.client.Dispatch('Excel.Application')
xl.Visible = True
refprop_path = path to XLA file
xl.Workbooks.Open(refprop_path)
xl.AddIns.Add(refprop_path)

xl.Workbooks.Open(new_file_path)
xl.Application.Run("iter1.xlsm!Sheet1.copy_data")
for i in range(0, 3):
    xl.Application.Run("iter1.xlsm!Sheet1.temp_const_gauge")
    xl.Application.Run("iter1.xlsm!Sheet1.copy_data")
xl.Application.Save()
xl.Application.Quit()

Надстройка не добавлена, и я получаю сообщение об ошибке.

xl.AddIns.Add(refprop_path).Installed = True
  File "<COMObject <unknown>>", line 3, in Add
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft Excel', u'Add method of AddIns class failed', u'xlmain11.chm', 0, -2146827284), None)

1 Ответ

0 голосов
/ 08 января 2019

Мне не нужно было явно писать строку для добавления надстройки. Я удалил эту строку, и проблема была решена.

Рабочий код:

new_file_path = path to excel_file.xlsm
xl = win32com.client.Dispatch('Excel.Application')
xl.Visible = True
refprop_path = path to XLA file
xl.Workbooks.Open(refprop_path)

xl.Workbooks.Open(new_file_path)
xl.Application.Run("iter1.xlsm!Sheet1.copy_data")
for i in range(0, 3):
    xl.Application.Run("iter1.xlsm!Sheet1.temp_const_gauge")
    xl.Application.Run("iter1.xlsm!Sheet1.copy_data")
xl.Application.Save()
xl.Application.Quit()

Мне кажется, что надстройку в файле XLA можно использовать, просто оставив ее открытой в фоновом режиме.

...