如何从python调用excel加载项

时间:2016-04-07 16:20:38

标签: python excel-addins

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

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

为了澄清,我对从excel访问python不感兴趣。我有兴趣从python访问excel-addins。

2 个答案:

答案 0 :(得分:4)

至少有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

网络抓取 如果您能够将加载项上载到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()

答案 1 :(得分:1)

link列出了一些可用于Excel和Excel文件的可用包。您可以在那里找到问题的答案。

总结一下,这里是一些列出的包的名称:

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

特别是对你来说这可能很有趣:

  

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