[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