La siguiente macro, detecta el tipo de documento (Calc, Writer, Draw, Impress, etc) desde el cual se ejecuta.
# -*- coding: utf-8 -*- import uno def quien_soy(): doc = XSCRIPTCONTEXT.getDocument() msgbox(obtener_tipo(doc)) return def obtener_tipo(doc): tipo = {'com.sun.star.sheet.SpreadsheetDocument': 'Calc', 'com.sun.star.text.TextDocument': 'Writer', 'com.sun.star.presentation.PresentationDocument': 'Impress', 'com.sun.star.drawing.DrawingDocument': 'Draw', 'com.sun.star.sdb.OfficeDatabaseDocument': 'Base', 'com.sun.star.formula.FormulaProperties': 'Math', 'com.sun.star.script.BasicIDE': 'Basic'} # iteramos entre los tipos de documentos for t in tipo: # validamos si soporta el servicio if doc.supportsService(t): # devolvemos el tipo de documento return 'Soy %s' % tipo[t] # si termina sin encontrar un tipo return 'No se que tipo soy' def msgbox(message): ctx = uno.getComponentContext() sm = ctx.getServiceManager() toolkit = sm.createInstanceWithContext('com.sun.star.awt.Toolkit', ctx) msg = toolkit.createMessageBox( toolkit.getDesktopWindow(), 'infobox', 1, 'UNOPython', str(message)) return msg.execute()
Para saber donde guardar estas macros, mira el wiki de Apache OpenOffice: http://wiki.openoffice.org/wiki/ES/Manuales/GuiaAOO/TemasAvanzados/Macros/Python