Загрузите надстройку Excel с помощью win32com из Python

Я видел из различных вопросов здесь, что если экземпляр Excel открывается из Python, используя:

xl = win32com.client.gencache.EnsureDispatch('Excel.Application') xl.Visible = True wb = xl.Workbooks.Open('Test.xlsx') 

Затем он не загружает надстройки по умолчанию. Я попытался заставить мою надстройку загружать, вместо этого:

 xl = win32com.client.gencache.EnsureDispatch('Excel.Application') xl.Visible = True addin = xl.Workbooks.Open('C:/path/addIn.xll') wb = xl.Workbooks.Open('Test.xlsx') 

Однако, когда я делаю это, открывается экземпляр Excel, и я получаю сообщение о безопасности с просьбой подтвердить, что я хочу открыть эту надстройку. Если я нажму «Включить эту надстройку только для этого сеанса», Excel немедленно закроется и не откроет мой желаемый файл xlsx.

Кто-нибудь есть идеи, как заставить надстройку загрузить, а затем разрешить мне открыть файл?

Большое спасибо за вашу помощь!

Я действительно сумел разрешить это, заимствуя что-то из этой статьи MSDN, относящейся к тому, чтобы делать то же самое с VBA:

http://support.microsoft.com/default.aspx?scid=KB;en-us;q213489

Следующее теперь прекрасно работает:

 xl = win32com.client.gencache.EnsureDispatch('Excel.Application') xl.Visible = True xl.RegisterXLL('C:/path/addin.xll') wb = xl.Workbooks.Open('Test.xlsx') 

У меня был намного лучший успех, используя Excel через win32com, чем любой другой метод, но вы можете посмотреть на pyxll ( https://www.pyxll.com/introduction.html ). Вот еще несколько вещей:

  • Вы проверили, что addin.Installed == True ?
  • Вы пробовали AddIns.Add("c:\windows\addins\TSXL\TSXL.xll").Installed = True ?
  • Попробуйте xl.DisplayAlerts=False перед открытием книг
  • Вы пробовали четыре шага в последнем ответе Automating Excel через COM / Python – стандартные добавления не загружаются при запуске , я их копирую здесь:

    1. Откройте XLA / XLL-файл, представляющий соответствующий addin
    2. Установить addins (addin_name) .Installed = False
    3. Addins (addin_name) .Add (addin_file_path)
    4. Установить addins (addin_name) .Installed = True

У меня была та же проблема, но я не мог использовать xl.RegisterXLL('C:/path/addin.xla') из принятого ответа, потому что он работает только с файлами .XLL, и у меня был .XLA-файл.

Вместо этого я обнаружил, что это сработало:

 xl = win32com.client.gencache.EnsureDispatch('Excel.Application') # Need to load the addins before opening the workbook addin_path = r'C:\path\addin.xla' xl.Workbooks.Open(addin_path) xl.AddIns.Add(addin_path).Installed = True wb = xl.Workbooks.Open(r"C:\my_workbook.xlsm") 
  • Вставить скопированные ячейки в Excel с помощью Python Win32Com
  • Python win32com «Недопустимое количество параметров»
  • Доступ к данным в Excel - Reuter из python
  • скопируйте весь рабочий лист excel на новый рабочий лист, используя Python win32com
  • Как разрезать данные Excel с помощью win32com в Python (3.6)
  • Не удается полностью закрыть Excel, используя win32com на Python
  • Как вставить изображение в Excel в указанной позиции ячейки с помощью python (Anaconda) использовать vba
  • Чтение Python Чтение данных ячейки Excel Zero
  • вставить специальное значение в другие несколько файлов excel с помощью python
  • Не удается сохранить файл Excel 2010 в формате PDF с помощью ExportAsFixedFormat, ошибка «Текущий принтер недоступен» с использованием API win32com от Python
  • Закрыть (и прочитать) сообщение из Excel в Python
  • Interesting Posts

    Диапазон изменения размера таблицы

    Функция Excel для повторного набора ячеек на определенное количество раз в зависимости от значения ячейки

    Т-распределение ученика в C ++

    Макроостановка без точки останова

    Рассчитать общее время между датами в часах и минутах

    Как ADO.NET может читать заблокированный файл Excel?

    Поиск количества непустых столбцов в листе Excel с использованием VBA

    Создание нескольких листов в jExcel API

    POST-запросы или объем данных, предоставленных в запросе, превышает предел емкости

    Сравнение индексов с критериями данных

    Отправка электронной почты в список рассылки с неактивного листа в Excel VBA

    Чтение значения вычитания ячейки excel в C # с использованием openXML

    Формула для вычисления общей суммы в день

    Вложенный IF возвращает окончательное значение без проверки других условий

    REGEXREPLACE в столбце с числовыми и текстовыми значениями

    Давайте будем гением компьютера.