在 Windows 中从 Python 驱动 Excel

问题描述 投票:0回答:7

我们有各种电子表格,它们使用极其复杂的宏和第三方扩展来生成复杂的模型。 我正在开展一个项目,其中涉及稍微调整各种输入并查看结果。 我不想手动执行此操作或编写 VBA,而是想看看是否可以编写一个 python 脚本来驱动此操作。换句话说,Python 脚本将启动,加载 Excel 工作表,然后通过在某些单元格中进行微小更改并查看它们如何影响其他单元格来与工作表进行交互。

所以,我的问题有两个:

  • 以这种方式从 python 驱动 excel 的最佳库是什么?

  • 使用所述库的最佳文档/示例在哪里?

干杯, /YGA

python excel scripting
7个回答
49
投票

要控制 Excel,请使用 pywin32,如 @igowen suggests

请注意,可以使用静态调度。使用 pywin32 项目中的

makepy.py
创建带有 python 包装器的 python 模块。使用生成的包装器可以简化开发,因为例如 ipython 可以在开发过程中为您提供制表符补全和帮助。

静态调度示例:

x:> makepy.py“Microsoft Excel 11.0 对象库”
...
生成...
导入模块
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
...

文档链接:


22
投票

我已经使用 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
投票

查看 DataNitro 项目(以前的名称 IronSpread)。它是 Excel 的 Python 插件。


2
投票

我花了大约一周的时间,这是我的实现(或者更确切地说是概念验证):https://github.com/Winand/SimplePython

主要思想是使 Python 代码像 VBA 宏一样易于编写和从 Microsoft Office 调用(我仅为 Excel 制作了加载项)。

  • 客户端-服务器架构(通过 TCP),因此 Python 仅启动一次
  • 服务器未运行时会自动启动
  • 当用户更改宏模块时,服务器会自动重新加载宏模块
  • Office 功能区上易于使用的控制界面

1
投票

我编写了 python 类,允许在 Windows 中通过 COM 接口使用 Excel http://sourceforge.net/projects/excelcomforpython/

该课程使用win32com与Excel进行交互。您可以直接使用类或将其用作示例。实现了很多选项,如数组公式、条件格式、图表等。


1
投票

我去年参与了一个家庭项目,其中涉及一个用 Python Excel 插件编写的客户端。 该项目本质上是一个简化了最终用户访问的在线数据库。 Excel插件允许用户从数据库中查询数据并在Excel中显示。

我对 Excel 插件从来没有深入了解,而且我的代码有点难看。 但是,我所拥有的是 BSD 许可证,可以通过 Bazaar 获得:

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

客户端无法工作,因为我现在没有运行公共服务器,但至少你可以看看我对代码做了什么,以了解它是如何工作的。 该代码还将向您展示如何使用 100% Python 构建 MFC 对话框。


0
投票

有一个有趣的项目,用于将 python 作为进程内 DLL 集成到 excel 中,可以在以下位置找到:

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

另一个具有相同想法的更简单的项目位于:

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

这些项目似乎有很大的希望,但需要更多的开发。

© www.soinside.com 2019 - 2024. All rights reserved.