# -*- coding: utf-8 -*- import win32com.client GlobalPVersion="0.03" 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 px = win32com.client.Dispatch('Ponx.Mci') pd = win32com.client.Dispatch('Ponxd.Mci') # Support for COM objects we use. gencache.EnsureModule('{00020813-0000-0000-C000-000000000046}', 0, 1, 3, bForDemand=True) # Excel 9 gencache.EnsureModule('{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}', 0, 2, 1, bForDemand=True) # Office 9 # 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, *par): import win32ui,win32con,win32com,win32com.client def connectexl(classeurnom): import win32ui,win32con,win32com,win32com.client mon = win32com.client.Moniker(classeurnom) #normalement classeurnom="Classeur1" contenu=str(mon.ActiveSheet.Cells(1,1).Value) win32ui.MessageBox(contenu, "moniker",win32con.MB_OKCANCEL) #mon.ActiveSheet.Cells(1,1).Value=876543210 """ hie = win32com.client.GetActiveObject("Excel.Application") contenu=str(hie.ActiveSheet.Cells(1,1).Value) win32ui.MessageBox(contenu, "HIE",win32con.MB_OKCANCEL) hie = win32com.client.GetObject(Class = "Excel.Application") contenu=str(hie.ActiveSheet.Cells(1,1).Value) win32ui.MessageBox(contenu, "HIE",win32con.MB_OKCANCEL) """ return contenu win32ui.MessageBox(px.PVersion(), "Version de Ponx",win32con.MB_OKCANCEL) exl=self.Application connectexl(exl.ActiveWorkbook.Name) exl.ActiveSheet.Cells(1,1).Value=str(px.PVersion()) return cancel class ButtonEvent2: def OnClick(self, button, cancel): import win32ui,win32con win32ui.MessageBox(pd.sinverse('ABCD'), "PonxD : sinverse('ABCD')",win32con.MB_OKCANCEL) return cancel class ExcelAddin: _com_interfaces_ = ['_IDTExtensibility2'] _public_methods_ = [] _reg_clsctx_ = pythoncom.CLSCTX_INPROC_SERVER _reg_clsid_ = "{C5482ECA-F559-45A0-B078-B2036E6F011A}" _reg_progid_ = "Ponx.Mci.ExcelAddin" _reg_policy_spec_ = "win32com.server.policy.EventHandlerPolicy" def __init__(self): self.appHostApp = None def OnConnection(self, application, connectMode, addin, custom): print "OnConnection", application, connectMode, addin, custom try: self.appHostApp = application cbcMyBar = self.appHostApp.CommandBars.Add(Name="PonxBar", Position=constants.msoBarTop, MenuBar=constants.msoBarTypeNormal, Temporary=True) btnMyButton = cbcMyBar.Controls.Add(Type=constants.msoControlButton, Parameter="Greetings") btnMyButton=self.toolbarButton = DispatchWithEvents(btnMyButton, ButtonEvent) btnMyButton.Style = constants.msoButtonCaption btnMyButton.BeginGroup = True btnMyButton.Caption = "&Ponx" btnMyButton.TooltipText = "Version de Ponx" btnMyButton.Width = "38" btnMyButton2 = cbcMyBar.Controls.Add(Type=constants.msoControlButton, Parameter="Greetings") btnMyButton2=self.toolbarButton2 = DispatchWithEvents(btnMyButton2, ButtonEvent2) btnMyButton2.Style = constants.msoButtonCaption btnMyButton2.BeginGroup = True btnMyButton2.Caption = "&Sinverse" btnMyButton2.TooltipText = "PonxD : sinverse('ABCD')" btnMyButton2.Width = "38" cbcMyBar.Visible = True except pythoncom.com_error, (hr, msg, exc, arg): print "The Excel call failed with code %d: %s" % (hr, msg) if exc is None: print "There is no extended error information" else: wcode, source, text, helpFile, helpId, scode = exc print "The source of the error is", source print "The error message is", text print "More info can be found in %s (id=%d)" % (helpFile, helpId) def OnDisconnection(self, mode, custom): print "OnDisconnection" self.appHostApp.CommandBars("PonxBar").Delete self.appHostApp=None 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\\Excel\\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, "Excel Ponx Addin (prototype)") _winreg.SetValueEx(subkey, "FriendlyName", 0, _winreg.REG_SZ, "Excel Ponx-Addin") def UnregisterAddin(klass): import _winreg try: _winreg.DeleteKey(_winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Office\\Excel\\Addins\\" + klass._reg_progid_) except WindowsError: pass if __name__ == '__main__': import win32com.server.register win32com.server.register.UseCommandLine(ExcelAddin) if "--unregister" in sys.argv: UnregisterAddin(ExcelAddin) else: RegisterAddin(ExcelAddin)