python如何导入pandas_如何将pandas导入到Python COM对象中

我必须在VBA和Python之间来回传递数据。在

我还需要VBA中的Python Obj来使用Pandas库(以及其他库,如numpy…)。在如果我根本不尝试导入pandas,则对象创建成功并正常工作(但没有使用pandas)。传递给Python对象的任何VBA数组都被识别为元组的元组

我需要将数据输入(元组的元组)转换为pandas数据帧。所以我的图书馆.py然后我将“pandas”添加到导入列表中(在文件顶部-请参阅下面的Python代码)

然后,我在pythonshell中成功地注册了模块(使用pandas)

在VBA中,当创建对象时。。。在Set Py = CreateObject("Python.MyModule")

…我收到一条与以下内容相关的错误消息:return retObj.CreateInstance(clsid, reqID)

或者,如果我从MyFunction中导入pandas(不在文件顶部声明),那么Python对象将成功创建(这就是在Python中从MyFunction导入pandas的方式):def MyFunction(self, data) :

import pandas

但是当我从VBA调用MyFunction时(也就是导入pandas时)。。。在ArrayOutput = Py.MyFunction(ArrayInput)

…我收到一条错误消息:

^{2美元

代码如下(我在文件顶部报告导入pandas的版本):

VBA代码:Sub UsePythonObj(ArrayInput)

''''''''''''''''''''''''''''''

' Create Python Object

Dim ArrayOutput As Variant

Dim Py As Object

Set Py = CreateObject("Python.MyModule")

''''''''''''''''''''''''''''''''''''''

' Run Python

ArrayOutput = Py.MyFunction(ArrayInput)

End Sub

Python代码:import sys, os, win32api, win32com.server.localserver, win32com.server.register, pandas

class MyModule(object):

_reg_clsid_ = "{5B4A4174-EE23-4B70-99F9-E57958CFE3DF}"

_reg_desc_ = "My Python COM Server"

_reg_progid_ = "Python.MyModule"

_public_methods_ = ['MyFunction']

def MyFunction(self, data) :

ProcessingData = pandas.DataFrame(list(data))

return ProcessingData

def register(*classes) :

regsz = lambda key, val: win32api.RegSetValue(-2147483647, key, 1, val)

isPy = not sys.argv[0].lower().endswith('.exe')

python_path = isPy and win32com.server.register._find_localserver_exe(1)

server_path = isPy and win32com.server.register._find_localserver_module()

for cls in classes :

if isPy :

file_path = sys.modules[cls.__module__].__file__

class_name = '%s.%s' % (os.path.splitext(os.path.basename(file_path))[0], cls.__name__)

command = '"%s" "%s" %s' % (python_path, server_path, cls._reg_clsid_)

else :

file_path = sys.argv[0]

class_name = '%s.%s' % (cls.__module__, cls.__name__)

command = '"%s" %s' % (file_path, cls._reg_clsid_)

regsz("SOFTWARE\\Classes\\" + cls._reg_progid_ + '\\CLSID', cls._reg_clsid_)

regsz("SOFTWARE\\Classes\\AppID\\" + cls._reg_clsid_, cls._reg_progid_)

regsz("SOFTWARE\\Classes\\CLSID\\" + cls._reg_clsid_, cls._reg_desc_)

regsz("SOFTWARE\\Classes\\CLSID\\" + cls._reg_clsid_ + '\\LocalServer32', command)

regsz("SOFTWARE\\Classes\\CLSID\\" + cls._reg_clsid_ + '\\ProgID', cls._reg_progid_)

regsz("SOFTWARE\\Classes\\CLSID\\" + cls._reg_clsid_ + '\\PythonCOM', class_name)

regsz("SOFTWARE\\Classes\\CLSID\\" + cls._reg_clsid_ + '\\PythonCOMPath', os.path.dirname(file_path))

regsz("SOFTWARE\\Classes\\CLSID\\" + cls._reg_clsid_ + '\\Debugging', "0")

print('Registered ' + cls._reg_progid_)

if __name__ == "__main__":

if len(sys.argv) > 1 :

win32com.server.localserver.serve(set([v for v in sys.argv if v[0] == '{']))

else :

register(MyModule)

你可能感兴趣的:(python如何导入pandas_如何将pandas导入到Python COM对象中)