在 Windows 中通过 Python 驱动 Excel

2025-03-11 08:50:00
admin
原创
52
摘要:问题描述:我们有各种电子表格,它们使用极其复杂的宏和第三方扩展来生成复杂的模型。我正在做一个项目,需要稍微调整各种输入并查看结果。我不想手动或编写 VBA 来完成这项工作,而是想看看我是否可以编写一个 Python 脚本来驱动它。换句话说,Python 脚本将启动,加载 Excel 工作表,然后通过对某些单元...

问题描述:

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

所以,我的问题有两个:

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

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

干杯,/YGA


解决方案 1:

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

请注意,可以使用静态调度。使用makepy.pypywin32 项目中的 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
...

文档链接:

  • O'Reilly 的《Win32 上的 Python 编程》一书有一个“与 Excel 集成”章节。

  • 同一本书,免费样品高级 Python 和 COM章节makepy.py详细介绍。

  • win32com 文档,我建议您先阅读这个。

解决方案 2:

我使用pywin32完成了此操作。这不是一个特别愉快的体验,因为实际上没有任何抽象;这就像使用 VBA,但使用 Python 语法。您不能依赖文档字符串,因此您需要准备好Excel VBA 参考(Worksheet 对象、Workbook 对象、Range 对象等)。

请参阅此处的简单示例。

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)。它是 Excel 的一个 Python 插件。

解决方案 4:

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

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

  • 客户端-服务器架构(通过 TCP),因此 Python 仅启动一次

  • 如果服务器未运行,则会自动启动

  • 当用户更改宏模块时,服务器会自动重新加载

  • Office 功能区上易于使用的控制界面

解决方案 5:

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

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

解决方案 6:

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

我从来没有对 Excel 插件做过多的改进,而且我的代码有点丑陋。不过,我所拥有的插件遵循 BSD 许可,可通过 Bazaar 获取:

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

由于我目前没有运行公共服务器,因此客户端无法工作,但至少您可以查看我对代码的处理,以了解其工作原理。代码还将向您展示如何用 100% Python 构建 MFC 对话框。

解决方案 7:

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

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

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

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

这些项目看起来很有前景但需要进一步发展。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2500  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1541  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   16  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   23  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   26  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用