2016-08-09 12 views
1

Gibt es einen dekorateur äquivalent zu PyXll @xl_func(macro=True) mit xlwings?Gibt es einen Decorator äquivalent zu PyXll `@xl_func (macro = True)` mit xlwings?

Dies würde ermöglichen, mit der gesamten Arbeitsmappe in Excel zu interagieren?

Ein Dummy Beispiel: =test() in Zelle ‚E5‘ gibt einen Fehler zurück:

@xw.func 
def test(): 
    wb = xw.Book.caller() 
    wb.sheets[0].range('A1').formula = wb.name 
    return 'done' 

Unexpected Python Error: TypeError: Objects for SAFEARRAYS must be sequences (of sequences), or a buffer object.

Aus Gründen der Klarstellung: Excel-Funktionen zu schreiben, ohne Arrays Formeln oder Knöpfen Ich möchte in der Lage sein, oder Makros.

Antwort

1

Ja, xw.sub, vom docs:

import xlwings as xw 

@xw.sub 
def my_macro(): 
    """Writes the name of the Workbook into Range("A1") of Sheet 1""" 
    wb = xw.Book.caller() 
    wb.sheets[0].range('A1').value = wb.name 
+0

Ich denke, das ist ein Makro, nicht mehr Excel-Funktion. Bedeutung Ich kann es nicht aus einer Excel-Arbeitsmappe verwenden, es sei denn, ich füge eine Schaltfläche hinzu, die ich nicht benötige. Wenn ich "= my_macro()" in Excel ausführe, gibt es den Fehler "der Name, den Sie eingegeben haben, ist nicht gültig" – Sam

+0

Können Sie mich auf die Dokumente in Pyxll von dem, was Sie tun möchten, zeigen? –

+0

Sicher: [link] (https://enthdough.pyxll.com/api/decorators.html#xl-func) (siehe das Argument 'macro'. Es erlaubt die Registrierung der Funktion als Makro-Blatt-Äquivalent Funktion (gegen eine UDF). Ein Beispiel wird hier zur Verfügung gestellt: [link] (https://onthought.pyxll.com/examples/automation.html) – Sam