Подтвердить что ты не робот

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

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

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

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

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

Cheers, /YGA

4b9b3361

Ответ 1

Для управления 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
...

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

Ответ 2

Я сделал это, используя pywin32. Это не особенно приятный опыт, поскольку на самом деле нет какой-либо абстракции; ему нравится использовать VBA, но с синтаксисом python. Вы не можете полагаться на docstrings, так что вам захочется иметь ссылку 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

Удачи!

Ответ 3

Просмотрите проект DataNitro (предыдущее имя IronSpread). Это плагин Python для Excel.

Ответ 4

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

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

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

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

Ответ 5

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

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

Ответ 6

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

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

  • Архитектура клиент-сервер (через TCP), поэтому Python запускается только один раз
  • Сервер автоматически запускается, если он не запущен.
  • Сервер автоматически перезагружает макромодули, когда пользователь меняет их.
  • Простой в использовании интерфейс управления на ленте Office

Ответ 7

Существует интересный проект для интеграции python в excel как внутрипроцессорную DLL, которая может быть создана:

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

Другой более простой проект по той же идее существует:

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

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