从打开的 Excel 工作簿中提取数据的库

Tim*_*ack -1 python excel pycharm python-3.x

我正在尝试从已经打开的工作簿中提取数据。

我找到了xlrd 库,但似乎只能将它用于通过 Python 打开的工作簿。我将在我的项目中使用的工作簿已经打开,因此此方法无法使用。

我发现的第二个库OpenPyxl只为我返回错误,即使工作簿是打开的:

from openpyxl import load_workbook

wb = load_workbook(filename = 'Components V2.4.3.xlsm')
Run Code Online (Sandbox Code Playgroud)

返回:

FileNotFoundError: [Errno 2] 没有这样的文件或目录:'Components V2.4.3.xlsm'

最后,我使用了无法从中获取单元格值的win32com.client's Dispatch,因此我正在寻找替代方法。

我做错了什么openpyxl,或者我可以使用另一种方法吗?

小智 6

打开当前在 Excel 中打开的工作簿 test.xlsx,并读取第一个工作表的单元格 A1 中的值:

from win32com.client import GetObject
xl = GetObject(None, "Excel.Application")
wb = xl.Workbooks("test.xlsx")
ws = wb.Sheets(1)
ws.Cells(1, 1).Value
Run Code Online (Sandbox Code Playgroud)

将范围读取为元组元组:

ws.Range("A1:D4").Value
Run Code Online (Sandbox Code Playgroud)

写回一些值:

ws.Range("A1:D4").Value = [[16, 3, 2, 13], [5, 10, 11, 8], [9, 6, 7, 12], [4, 15, 14, 1]]
Run Code Online (Sandbox Code Playgroud)

对评论的回答:COM(组件对象模型),有时也称为“自动化”,允许 Windows 应用程序提供一个“COM 服务器”,它可以访问它的一些 API,从“COM 客户端”访问. Excel 有这样一个服务器(VBA 有一个客户端:您可以使用VBA 中的CreateObjectGetObject)。

其他应用程序通过 COM 提供类似的服务:例如MATLABSASStata和 Microsoft Office 的所有应用程序。

Python 有一个带有pywin32的客户端。您也可以使用 Pywin32 开发服务器,例如参见:Portable Python com server using pywin32

请注意,就 Excel 而言,正如您所注意到的,您可以访问大部分对象层次结构,并非常精确地控制 Excel 的行为。基本上,如果您可以在 VBA 中执行此操作,则可以从任何 COM 客户端执行此操作。


关于范围的最后一行,我不确定我是否理解您想要什么。是这样的:Excel VBA Find last row in range


还有几点:

如果 Excel 尚未打开,您仍然可以打开与 Excel 的连接。在 VBA 中,执行此操作的函数是 CreateObject 而不是 GetObject,但在 Python 中它是 Dispatch:

from win32com.client import Dispatch
xl = Dispatch("Excel.Application")
xl.WorksheetFunction.Gamma(0.5)
Run Code Online (Sandbox Code Playgroud)

在 VBA 中,您经常会使用 Excel“常量”,例如 xlUp。它们也可以在 Python 中使用(开始与 Excel 连接,使用 GetObject 或 Dispatch):

from win32com.client import constants as const
const.xlUp
Run Code Online (Sandbox Code Playgroud)

要连接到计算机上安装的 COM 服务器,您需要获取对象的名称。这里有几个案例:

对于 Microsoft Office:

在 VBScript 中经常使用:

专业软件:

  • Matlab.Application
  • SAS应用
  • stata.StataOLEApp

最后一句话:作为解释在这里,你可以找到Pywin32的文档,无论是在它的安装(目录[Pythonpath]\Lib\site-packages\PyWin32.chm),或在此网站:http://timgolden.me.uk/pywin32-docs/contents.html