Excel与Python交互

时间:2014-02-14 17:31:59

标签: python excel

您在将数据传入和传出MS-Excel时看到了哪些工具?

这些是关于工具选择的建议请求,以及在线提供的优秀技术文章。这不是关于wxpython中命名方法和对象的问题。

背景

我有工作或退休或安乐死许多用户开发的Microsoft Excel应用程序,最终状态是数据存储和检索以及数据处理都将驻留在我们公司的服务器上并在其上运行现有的公司范围的Python应用程序平台。

这些Excel工作簿中的一些将继续存在,通过Python应用程序从我们的服务器调用数据 - 这看起来很像现有Excel加载项的屏幕和菜单 - 而Excel仍将用于任何本地数据 - 我们的用户选择做什么。但是在我们的服务器上,繁重的工作正在转向python,我们拥有庞大的python对象和工具代码库。

我们可以自由地设计工具和界面来完成所有这些工作。

所以问题是:

  1. 你看到了什么?
  2. 那里有什么工具?
  3. 你发现了什么陷阱和失误?
  4. 我们越是从Excel和VBA中取出并在服务器上运行,我就会越快乐。我所看到的很多VBA代码和基于单元的公式逻辑应该在几年前已经退役,并且在脆弱的桌面工具中运行它具有明显的操作风险。

    请注意,我们要比“在这里,让我打开一个新的Excel工作表,粘贴和格式化一些数据,并保存文件” - 我们需要与现有的Excel进行交互工作表,在Excel.exe的现有会话中打开并运行。

2 个答案:

答案 0 :(得分:5)

听起来像我正在使用pywin32库直接使用Excel组件对象模型。走这条路,您将可以通过python访问所有excel函数。看一下Excel的COM接口参考:

http://msdn.microsoft.com/en-us/library/office/ee861528.aspx

您首先需要安装pywin32 library。然后让自己熟悉python中的COM交互。以下是来自Python Programming on Win32的章节,可帮助您入门。

使用pywin32控制Excel的基本介绍:

from win32com.client import Dispatch

>>> excel = Dispatch('Excel.Application') # get a handle to the Excel COM object
>>> workbook = excel.Workbooks.Open('absolute\\path\\to\\workbook.xlsm') # open an existing excel workbook
>>> worksheet = workbook.Worksheets('Sheet1') # get the worksheet called "Sheet1"
>>> r = worksheet.Range('A1:A5')
>>> print r.Value
((u'Value of A1',), (u'Value of A2',), (u'Value of A3',), (u'Value of A4',), (u'Value of A5',))
>>>
>>> r.Value = range(5)
>>> print r.Value
((0.0,), (1.0,), (2.0,), (3.0,), (4.0,))
>>>
>>> workbook.Close()
>>> excel.Quit()

您可以使用COM对象控制Excel的任何方面。如果您第一次运行excel.Visible = 1,您可以实时观察所有更改。

但是,在使用此API时,需要小心正确关闭excel对象。如果您的程序在正确调用excel.Quit()之前崩溃或退出(在某些情况下我发现我必须明确调用del excel),那么您将最终在后台运行EXCEL.exe进程

答案 1 :(得分:2)

我所做的事情(将Excel电子表格集合中的数据清理和清理到SQL后端)比你所使用的功能简单得多,但xlrd是一个真正的宝石。它可以让你浏览Excel电子表格,并在Python中自然地处理他们的数据。我已经使用了大量糟糕且痛苦的API,xlrd不是其中之一。我没有使用它的Excel写作伴侣xlwt,但根据我对xlrd的经验,我寄予厚望。

http://www.python-excel.org