2016-07-08 16 views
1

In meinem VBA-Sub, rufe ich ein Python-Skript mit dem Befehl RunPython von xlwings. Ich möchte eine Funktion aufrufen, die ein Array als Parameter verwendet. Wie kann ich den VBA-Datentyp in eine von Python lesbare Liste konvertieren?übergeben Array als Parameter des RunPython-Skript in VBA (xlwings)

Code:

RunPython("import script; script.query(dates=argsArray, queryString='"& myString &"') 

Ich kann erfolgreich einen String mit & passieren, obwohl ich weiß nicht, wie das Array argsArray als Parameter zu übergeben.

Antwort

0

Schauen Sie sich die Konverter an.

http://docs.xlwings.org/en/stable/converters.html?highlight=array

Was Sie tun können, ist die Range-Adresse als String übergeben und dann die Werte erhalten, wie als Array. Aus der Dokumentation:

arr = xw.Range('A1:A3').options(np.array, ndim=2).value 

, wo Du A1: A3 'ersetzen würde mit argsArrayAddressString:

RunPython("import script; script.query(dates=argsArrayAddressString, queryString='"& myString &"') 

dann in Ihrem Code:

arr = xw.Range(argsArrayAddressString).options(np.array, ndim=2).value 
+0

Klingt gut, obwohl in meiner UDF Signatur VBA, sollte argsArrayAddressString vom Typ Range sein? –

+0

In diesem Fall wäre es eine Zeichenfolge "A1: A3", die dann verwendet wird, um einen Bereich zu erstellen. Python, das auf diese Weise aufgerufen wird, wird ein VBA-Bereichsobjekt nicht verstehen. Wenn Sie komplizierter werden möchten, können UDFs mit Dekoratoren erstellt werden, die Bereiche als numpige Arrays definieren. siehe hier: http://docs.xlwings.org/en/stable/vba.html#function-arguments-and-return-values. und auch hier zu sehen: http://docs.xlwings.org/en/stable/udfs.html –

+0

Ich weiß, irgendwie danken Ihnen, ich schätze Ihre Bemühungen. Ich denke, ich versuche hauptsächlich andere Argumente als Strings an Funktionen in meinem RunPython-Skript zu übergeben. –