【问题标题】:Using Python COM objects from Excel VBA使用 Excel VBA 中的 Python COM 对象
【发布时间】:2016-11-14 09:29:03
【问题描述】:

我正在尝试创建要在 Excel 中使用的 Python 类,参考 Python:Win32 上的编程。

目前: Python 脚本 (win32comLibrary.py)

class PythonUtilities:
    _public_methods_ = [ "SplitString" ]
    _reg_progid_ = "PythonDemos.Utilities"
    _reg_clsid_ = "{AF272547-D5BC-4452-852E-3F8746672097}"
    def SplitString(self, val, item = None):
        import string
        if item!=None: item = str(item)
        return string.split(str(val), item)

if __name__== "__main__":
    print("Registering COM server...")
    import win32com.server.register
    win32com.server.register.UseCommandLine(PythonUtilities)

Excel VBA

Sub test()
    Set PythonUtils = CreateObject("PythonDemos.Utilities")
    response = PythonUtils.SplitString("Hello From VB", " ")
    For Each Item In response
        MsgBox Item
    Next Item

End Sub

问题: (a) 在reponse = ... 行,有一个runtime error '-2147467259 (80004005)': Unexpected Python Error: Traceback (most recent call last): File .....

(b) 当我在 cmd 中输入python win32comLibrary.py --unregister 时,它返回了Registering COM server...Traceback (most recent call last): File "win32comLibrary.py", line 19, in (module) import win32com.server.register ImportError: No module named win32com.server.register

我目前正在使用 anaconda (spyder) 并安装了 pywin32。从 Python 调用 win32com.client 方法似乎不会引发任何错误。

我们将不胜感激。

【问题讨论】:

    标签: python excel vba python-3.x anaconda


    【解决方案1】:

    我已经设法解决了这个问题 - 只是为了关闭它。不确定它是否是旧版本的 python 和 3.x 之间的区别,但 string.split(str(val), item) 似乎不再起作用。相反,我已将返回语句更改为return val.split(item)。我的监督 - 道歉。

    【讨论】:

      猜你喜欢
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 2014-10-21
      • 1970-01-01
      • 2011-10-13
      • 2020-11-05
      相关资源
      最近更新 更多