Der Name der Schaltfläche kann aus dem ActionEvent ermittelt werden, das als Parameter übergeben wird. Für das Beispiel unten habe ich den Button benannt btnRow4
.
Die Position zu erhalten ist schwieriger, jedoch möglich, indem die XShape der Schaltfläche von DrawPage abgerufen wird. Hier ist ein Code, der veranschaulicht, wie das alles funktioniert:
def rowMacro(action_event=None): ## Get the button name. if action_event: button_name = action_event.Source.Model.getName() else: button_name = '' if button_name == 'btnRow4': rowname = "4" else: rowname = "5" ## Get the button position. oDoc = XSCRIPTCONTEXT.getDocument() oSheet = oDoc.CurrentController.ActiveSheet oDrawPage = oSheet.DrawPage oShape = None for i in range(oDrawPage.Count): aShape = oDrawPage.getByIndex(i) if aShape.supportsService("com.sun.star.drawing.ControlShape"): if aShape.getControl().getName() == button_name: oShape = aShape if oShape: ypos = oShape.getPosition().Y else: ypos = "(didn't click on a button)" ## Show results. oCell = oSheet.getCellRangeByName("A" + rowname) oCell.String = "Y Position: " + str(ypos)
Eine Diskussion darüber getPosition()
findet sich unter https://forum.openoffice.org/de/forum/viewtopic.php?f=20&t=82422 .