Вождение Excel из Python в Windows - PullRequest
       35

Вождение Excel из Python в Windows

41 голосов
/ 14 января 2009

У нас есть различные электронные таблицы, в которых используются сложные макросы и сторонние расширения для создания сложных моделей. Я работаю над проектом, который включает в себя небольшую настройку различных входных данных и просмотр результатов. Вместо того, чтобы делать это вручную или писать на VBA, я хотел бы посмотреть, смогу ли я написать скрипт Python для управления этим. Другими словами, скрипт python запустится, загрузит лист Excel, а затем будет взаимодействовать с ним, внося незначительные изменения в некоторые ячейки и наблюдая, как они влияют на другие ячейки.

Итак, мой вопрос двоякий:

  • Какую библиотеку лучше всего использовать для управления Excel от Python таким образом?

  • Где лучшая документация / примеры использования указанной библиотеки?

Ура, / YGA

Ответы [ 7 ]

45 голосов
/ 15 января 2009

Для управления Excel используйте pywin32, как предлагает @igowen.

Обратите внимание, что возможно использовать статическую диспетчеризацию. Используйте makepy.py из проекта pywin32 для создания модуля python с оболочками python. Использование сгенерированных оболочек упрощает разработку, поскольку, например, ipython дает вам возможность завершить вкладку и помогает во время разработки.

Пример статической отправки:

x:> makepy.py "Microsoft Excel 11.0 Object Library"
...
Generating...
Importing module
x:> ipython
> from win32com.client import Dispatch
> excel = Dispatch("Excel.Application")
> wb = excel.Workbooks.Append()
> range = wb.Sheets[0].Range("A1")
> range.[Press Tab]
range.Activate                 range.Merge
range.AddComment               range.NavigateArrow
range.AdvancedFilter           range.NoteText
...
range.GetOffset                range.__repr__
range.GetResize                range.__setattr__
range.GetValue                 range.__str__
range.Get_Default              range.__unicode__
range.GoalSeek                 range._get_good_object_
range.Group                    range._get_good_single_object_
range.Insert                   range._oleobj_
range.InsertIndent             range._prop_map_get_
range.Item                     range._prop_map_put_
range.Justify                  range.coclass_clsid
range.ListNames                range.__class__
> range.Value = 32
...

Ссылки на документацию:

21 голосов
/ 14 января 2009

Я сделал это с помощью pywin32 . Это не особенно приятный опыт, так как в действительности нет никакой абстракции; это похоже на использование VBA, но с синтаксисом Python. Вы не можете полагаться на строки документов, поэтому вам понадобится справка по MSDN Excel (http://msdn.microsoft.com/en-us/library/aa220733.aspx - это то, что я использовал, если я правильно помню. Вы сможете найти документы Excel 2007, если копаете немного.).

См. здесь для простого примера.

from win32com.client import Dispatch

xlApp = Dispatch("Excel.Application")
xlApp.Visible = 1
xlApp.Workbooks.Add()
xlApp.ActiveSheet.Cells(1,1).Value = 'Python Rules!'
xlApp.ActiveWorkbook.ActiveSheet.Cells(1,2).Value = 'Python Rules 2!'
xlApp.ActiveWorkbook.Close(SaveChanges=0) # see note 1
xlApp.Quit()
xlApp.Visible = 0 # see note 2
del xlApp

Удачи!

8 голосов
/ 11 июня 2012

Ознакомьтесь с проектом DataNitro (прежнее название IronSpread). Это плагин Python для Excel.

1 голос
/ 27 августа 2015

Я провел около недели, и вот моя реализация (или, скорее, подтверждение концепции): https://github.com/Winand/SimplePython

Основная идея заключается в том, чтобы сделать код Python таким же простым для написания и вызова из Microsoft Office, как и макросы VBA (я сделал надстройку только для Excel).

  • Клиент-серверная архитектура (через TCP), поэтому Python запускается только один раз
  • Сервер запускается автоматически, если он не работает
  • Сервер автоматически перезагружает макромодули, когда пользователь меняет их
  • Простой в использовании интерфейс управления на ленте Office
1 голос
/ 10 февраля 2014

Я написал Python класс, который позволяет работать с Excel через интерфейс COM в Windows http://sourceforge.net/projects/excelcomforpython/

Класс использует win32com для взаимодействия с Excel. Вы можете использовать класс напрямую или использовать его в качестве примера. Реализовано множество опций, таких как формулы массивов, условное форматирование, диаграммы и т. Д.

1 голос
/ 15 января 2009

В прошлом году я работал над домашним проектом, в котором участвовал клиент, написанный в виде плагина Python Excel. По сути, проект представляет собой онлайновую базу данных, упрощенную для доступа конечных пользователей. Плагин Excel позволяет пользователям запрашивать данные из базы данных для отображения в Excel.

Я никогда не заходил слишком далеко с плагином Excel, и мой код для него немного уродлив. Но то, что у меня есть, находится под лицензией BSD и доступно через Bazaar на

http://www.launchpad.net/analyz/trunk

Клиент не будет работать, так как у меня сейчас нет общедоступного сервера, но по крайней мере вы можете посмотреть, что я сделал с кодом, чтобы получить некоторые идеи, как это может работать. Код также покажет вам, как построить диалог MFC на 100% Python.

0 голосов
/ 14 февраля 2014

Существует интересный проект по интеграции Python в Excel как внутрипроцессную DLL, который можно найти по адресу:

http://opentradingsystem.com/PythonForExcel/main.html

Еще один, несколько более простой проект с той же идеей существует по адресу:

http://www.codeproject.com/Articles/639887/Calling-Python-code-from-Excel-with-ExcelPython

Эти проекты, как представляется, имеют большие перспективы, но требуют доработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...