[python-win32] creating a Word AddIn based on the Excel one

Kieran Martin kieran at e-spatial.co.nz
Mon Mar 31 22:54:50 CEST 2008


I tried to create a really basic Word AddIn based on the Excel example
(which works fine for me).  I've pasted the code below. 

 

Apologies for my general ignorance - I've trolled the Archives looking for
something close but no dice.  I've had luck making an Excel AddIns in the
past and can make my way round the Word Object model, VBA et al. But I'm
really winging it with the COM stuff.

 

Thanks in advance to who-ever takes a look at this .

 

Kieran Martin 

e-Spatial Ltd

New Zealand

 

 

Here's the trace collector data:

 

# This window will display output from any programs that import
win32traceutil

# win32com servers registered with '--debug' are in this category.

Object with win32trace dispatcher created (object=None)

OnConnection Microsoft Word 0 A Simple Word Addin (2,)

pythoncom error: Failed to call the universal dispatcher

 

Traceback (most recent call last):

  File "C:\Python24\lib\site-packages\win32com\universal.py", line 177, in
dispatch

    retVal = ob._InvokeEx_(meth.dispid, 0, meth.invkind, args, None, None)

  File "C:\Python24\lib\site-packages\win32com\server\policy.py", line 332,
in _InvokeEx_

    return self._invokeex_(dispid, lcid, wFlags, args, kwargs,
serviceProvider)

  File "C:\Python24\lib\site-packages\win32com\server\policy.py", line 654,
in _invokeex_

    return DesignatedWrapPolicy._invokeex_( self, dispid, lcid, wFlags,
args, kwArgs, serviceProvider)

  File "C:\Python24\lib\site-packages\win32com\server\policy.py", line 588,
in _invokeex_

    return func(*args)

  File "c:\Python24\Lib\site-packages\win32com\demos\wordAddin.py", line 62,
in OnConnection

    print "OnDisconnection"

exceptions.NameError: global name 'appHostApp' is not defined

pythoncom error: Unexpected gateway error

 

Traceback (most recent call last):

  File "C:\Python24\lib\site-packages\win32com\universal.py", line 177, in
dispatch

    retVal = ob._InvokeEx_(meth.dispid, 0, meth.invkind, args, None, None)

  File "C:\Python24\lib\site-packages\win32com\server\policy.py", line 332,
in _InvokeEx_

    return self._invokeex_(dispid, lcid, wFlags, args, kwargs,
serviceProvider)

  File "C:\Python24\lib\site-packages\win32com\server\policy.py", line 654,
in _invokeex_

    return DesignatedWrapPolicy._invokeex_( self, dispid, lcid, wFlags,
args, kwArgs, serviceProvider)

  File "C:\Python24\lib\site-packages\win32com\server\policy.py", line 588,
in _invokeex_

    return func(*args)

  File "c:\Python24\Lib\site-packages\win32com\demos\wordAddin.py", line 62,
in OnConnection

    print "OnDisconnection"

exceptions.NameError: global name 'appHostApp' is not defined

 

 

>>>> here's the code

 

 

 

#

from win32com import universal

from win32com.server.exception import COMException

from win32com.client import gencache, DispatchWithEvents

import winerror

import pythoncom

from win32com.client import constants, Dispatch

import sys

 

# Support for COM objects we use.

gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 1, 3,
bForDemand=True) # Word 11

gencache.EnsureModule('{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}', 0, 2, 1,
bForDemand=True) # Office 11

 

# The TLB defiining the interfaces we implement

universal.RegisterInterfaces('{AC0714F2-3D04-11D1-AE7D-00A0C90F26F4}', 0, 1,
0, ["_IDTExtensibility2"])

class ButtonEvent:

    def OnClick(self, button, cancel):

        import win32ui # Possible, but not necessary, to use a Pythonwin GUI

        import win32con

        win32ui.MessageBox("Hello from Python", "Python
Test",win32con.MB_OKCANCEL)

        return cancel

 

class WordAddin:

    _com_interfaces_ = ['_IDTExtensibility2']

    _public_methods_ = []

    _reg_clsctx_ = pythoncom.CLSCTX_INPROC_SERVER

    _reg_clsid_ = "{C5482ECA-F559-45A0-B078-B2036E6F011A}"

    _reg_progid_ = "Python.Test.WordAddin"

    _reg_policy_spec_ = "win32com.server.policy.EventHandlerPolicy"

 

    def __init__(self):

        return

    

    def OnConnection(self, application, connectMode, addin, custom):

        print "OnConnection", application, connectMode, addin, custom

 

    def OnDisconnection(self, mode, custom):

        print "OnDisconnection"

        

    def OnAddInsUpdate(self, custom):

        print "OnAddInsUpdate", custom

    def OnStartupComplete(self, custom):

        print "OnStartupComplete", custom

    def OnBeginShutdown(self, custom):

        print "OnBeginShutdown", custom

 

def RegisterAddin(klass):

    import _winreg

    key = _winreg.CreateKey(_winreg.HKEY_CURRENT_USER,
"Software\\Microsoft\\Office\\Word\\Addins")

    subkey = _winreg.CreateKey(key, klass._reg_progid_)

    _winreg.SetValueEx(subkey, "CommandLineSafe", 0, _winreg.REG_DWORD, 0)

    _winreg.SetValueEx(subkey, "LoadBehavior", 0, _winreg.REG_DWORD, 3)

    _winreg.SetValueEx(subkey, "Description", 0, _winreg.REG_SZ, "Word
Addin")

    _winreg.SetValueEx(subkey, "FriendlyName", 0, _winreg.REG_SZ, "A Simple
Word Addin")

 

def UnregisterAddin(klass):

    import _winreg

    try:

        _winreg.DeleteKey(_winreg.HKEY_CURRENT_USER,
"Software\\Microsoft\\Office\\Word\\Addins\\" + klass._reg_progid_)

    except WindowsError:

        pass

 

if __name__ == '__main__':

    import win32com.server.register

    win32com.server.register.UseCommandLine(WordAddin)

    if "--unregister" in sys.argv:

        UnregisterAddin(WordAddin)

    else:

        RegisterAddin(WordAddin)

 

 

 

 

 

 

_______________________________________________________ 
Kieran Martin 
e-Spatial Limited                                PO Box 10015 
Phone: + 64 4 499 3546                    Wellington 6143
Fax:      + 64 4 499 3547                    NEW ZEALAND 

Cell:      + 64 274 9000 77
                           <http://www.e-spatial.co.nz/> www.e-spatial.co.nz

      location based business intelligence

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/python-win32/attachments/20080401/a4cd9dcc/attachment-0001.htm 


More information about the python-win32 mailing list