Вождение Excel из Python в Windows
У нас есть различные электронные таблицы, в которых используются сложные сложные макросы и сторонние расширения для создания сложных моделей. Я работаю над проектом, который предполагает небольшую настройку различных материалов и просмотр результатов. Вместо того, чтобы делать это вручную или писать VBA, я хотел бы посмотреть, могу ли я написать python script, чтобы управлять этим. Другими словами, запускается python script, загружает лист excel и затем взаимодействует с листом, делая небольшие изменения в некоторых ячейках и видя, как они влияют на другие ячейки.
Итак, мой вопрос двоякий:
Cheers,
/YGA
Ответы
Ответ 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
Эти проекты, похоже, имеют большие перспективы, но нуждаются в большем развитии.