如何从python调用excel加载项

Nic*_*ick 8 python excel-addins

有没有办法从python调用Excel加载项?在我的公司中,有几个可用的 excel 加载项,它们通常提供对某些数据库的直接访问并进行额外的计算。

直接从 python 调用这些函数的最佳方法是什么?

澄清一下,我对从 excel 访问 python 不感兴趣。我对从 python 访问 excel-addins 感兴趣。

Gre*_*reg 5

至少有 3 种可能的方法来调用 Excel 加载项、直接调用 COM 加载项或通过自动化调用。

Microsoft 为其 Excel 互操作提供在线文档 ( https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel )。虽然它适用于 .NET,但它突出了主要限制。您不能直接调用自定义功能区(其中包含加载项)。这是为了保护一个加载项免受另一个加载项的影响。(虽然您可以安装/卸载插件)。

COM 加载项 您可以使用 win32com.client 直接调用 COM 加载项。但是,您只能运行对 COM 可见的方法。这意味着您可能需要更改加载项。请参阅 C# 教程https://docs.microsoft.com/en-us/visualstudio/vsto/walkthrough-calling-code-in-a-vsto-add-in-from-vba?view=vs-2019

一旦公开了该方法,就可以在 Python 中使用win32com.client调用它。例如:

import win32com.client as win32

def excel():
    # This may error if Excel is open.
    return win32.gencache.EnsureDispatch('Excel.Application')

xl = excel()
helloWorldAddIn = xl.COMAddIns("HelloWorld") # HelloWorld is the name of my AddIn.
#app = helloWorldAddIn.Application 
obj = helloWorldAddIn.Object # Note: This will be None (null) if add-in doesn't expose anything.
obj.processData() # processData is the name of my method
Run Code Online (Sandbox Code Playgroud)

网页抓取 如果您能够将加载项上传到 Office 365 帐户。然后,您可以使用 Selenium 之类的软件包进行网页抓取。我没有尝试过。此外,您很可能会遇到调用外部资源(如连接字符串和 http 调用)的问题。

自动化 您可以使用自动化包运行加载项。例如pyautogui。您可以编写代码来控制鼠标和键盘以模拟运行加载项的用户。此解决方案意味着您不需要更新现有加载项。

通过自动化调用加载项的一个非常基本的示例:

import os
import pyautogui
import time

def openFile():    
    path = "C:/Dev/test.xlsx"
    path = os.path.realpath(path)
    os.startfile(path)
    time.sleep(1)

def fullScreen():    
    pyautogui.hotkey('win', 'up')
    time.sleep(1)

def findAndClickRibbon():    
    pyautogui.moveTo(550, 50)
    pyautogui.click()
    time.sleep(1)

def runAddIn():    
    pyautogui.moveTo(15, 100)
    pyautogui.click()
    time.sleep(1)

def saveFile():    
    pyautogui.hotkey('ctrl', 's')
    time.sleep(1)

def closeFile():    
    pyautogui.hotkey('alt', 'f4')
    time.sleep(1)

openFile()
fullScreen()
findAndClickRibbon()
runAddIn()
saveFile()
closeFile()
Run Code Online (Sandbox Code Playgroud)


Dat*_*man -1

链接列出了一些可用于处理 Excel 和 Excel 文件的软件包。您可能会在那里找到问题的答案。

作为总结,以下是一些列出的软件包的名称:

  1. openpyxl - 读取/写入 Excel 2007 xlsx/xlsm 文件
  2. xlrd - 从任何平台上的 Excel 电子表格(.xls 和 .xlsx,版本 2.0 及以上)提取数据
  3. xlsxwriter - 以 Excel 2007+ XLSX 文件格式写入文件
  4. xlwt - 生成与 Excel 97/2000/XP/2003、OpenOffice.org Calc 和 Gnumeric 兼容的电子表格文件。

尤其是这对你来说可能很有趣:

ExPy - ExPy 是免费提供的演示软件,安装简单。安装后,Excel 用户可以访问包装 Python 代码的内置 Excel 函数。该站点提供了文档和示例。