在Windows中从Python驱动Excel

时间:2009-01-14 02:53:27

标签: python excel scripting

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

所以,我的问题有两个:

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

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

干杯, / YGA

7 个答案:

答案 0 :(得分:45)

为了控制Excel,请使用pywin32,就像@igowen建议的那样。

请注意,可以使用静态分派。使用pywin32项目中的makepy.py创建一个带有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
...

文档链接:

答案 1 :(得分:21)

我使用pywin32完成了这项工作。这不是一个特别愉快的经历,因为它没有任何抽象;它就像使用VBA,但使用python语法。你不能依赖于文档字符串,所以你想要方便地使用MSDN Excel引用(http://msdn.microsoft.com/en-us/library/aa220733.aspx是我使用的,如果我没记错的话。如果你挖掘的话,你应该能够找到Excel 2007文档一点。)。

有关简单示例,请参阅here

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
祝你好运!

答案 2 :(得分:8)

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

答案 3 :(得分:1)

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

我从来没有使用Excel插件,我的代码有点难看。但是,我所拥有的是BSD许可证,可通过Bazaar在

获得

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

由于我现在没有运行公共服务器,因此客户端将无法工作,但至少您可以查看我对代码所做的工作,以获得一些可行的方法。该代码还将向您展示如何在100%Python中构建MFC对话框。

答案 4 :(得分:1)

我编写了python类,允许通过Windows http://sourceforge.net/projects/excelcomforpython/

中的COM接口使用Excel

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

答案 5 :(得分:1)

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

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

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

答案 6 :(得分:0)

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

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

另一个更简单的项目存在于同一个想法:

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

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