2013-08-08 12 views
17

versuchen, ein Python-Skript auf Vba aufzurufen, und ich bin ein Newb. Ich habe versucht, das Hauptskript mit py2exe in eine exe zu konvertieren und dann von VBA (shell) aus aufzurufen, aber das Hauptskript ruft andere Skripte auf, daher wird es kompliziert und ich habe es vermasselt (meine exe funktioniert nicht). Außerdem ist das Hauptscript eine große Datei und ich möchte es nicht viel überarbeiten.Wie Python-Skript auf Excel VBA aufrufen?

Bottomline, gibt es eine Möglichkeit, das Hauptscript von Excel VBA aufrufen, ohne das Skript in eine EXE-Datei zu konvertieren.

Bisher habe ich versucht:

RetVal = Shell("C:\python27\python.exe " & "import " & "C:\\" & "MainScriptFile") 

Es beginnt python.exe aber tut nichts anderes. Dann habe ich versucht:

RetVal = Shell("C:\Windows\System32\cmd.exe " & "python " & "C:\\Python27\\hello.py") 

Es startet die Eingabeaufforderung, aber startet nicht einmal Python.

P.S. Ich habe alle verwandten Fragen im Forum überprüft, sie lösen mein Problem nicht.

Antwort

14

Versuchen Sie folgendes:

RetVal = Shell("<full path to python.exe> " & "<full path to your python script>") 

Oder wenn das Python-Skript in dem gleichen Ordner wie der Arbeitsmappe ist, dann können Sie versuchen:

RetVal = Shell("<full path to python.exe> " & ActiveWorkBook.Path & "\<python script name>") 

Alle Details innerhalb <> sind gegeben werden. <> - zeigt veränderbare Felder an

Ich denke, das sollte funktionieren. Wenn Ihr Skript jedoch andere Dateien aufrufen wird, die sich in verschiedenen Ordnern befinden, kann dies zu Fehlern führen, sofern Ihr Skript diese nicht korrekt verarbeitet hat. Ich hoffe es hilft.

+0

ich diese schon versucht. Es startet den Python-Interpreter, tut aber nichts anderes. Ich glaube, dass "Shell" nur die exe-Dateien ausführt und es mir nicht erlaubt, mein Skript auszuführen. –

+3

Sorry, ich weiß nicht, was ich vorher falsch gemacht habe. Es hat jetzt funktioniert. Danke vielmals! Ich habe verwendet: RetVal = Shell ("C: \ Python27 \ Python.exe C: \ Python27 \ CallOptimizer.py") –

+0

@EgeOzlem können Sie bitte ein Beispiel für Ihr Python-Skript, das Sie von der VBA ausgeführt haben? und was es zu VBA Anruf zurückgekehrt war? – ggupta

4

Es gibt ein paar Möglichkeiten, dieses Problem zu lösen

Pyinx - ein ziemlich leichtes Werkzeug, das Sie Python aufrufen können aus den Prozessraum excel withing http://code.google.com/p/pyinex/

ich dieses verwendet habe ein paar vor Jahren (zurück, wenn es aktiv entwickelt wurde) und es funktioniert recht gut

Wenn Sie nicht zahlen nichts dagegen, das sieht ziemlich gut

https://datanitro.com/product.html

Ich habe es nie benutzt, obwohl


Obwohl, wenn Sie bereits in Python writting, vielleicht fallen Sie ganz und in reinem Python tut alles übertreffen könnten? Es ist viel einfacher, eine Code-Basis (Python) als 2 (Python + was auch immer Excel-Overlay haben Sie) zu pflegen.

Wenn Sie wirklich Ihre Daten in Excel ausgeben müssen, gibt es sogar einige ziemlich gute Werkzeuge dafür in Python. Wenn das besser funktioniert, lass es mich wissen und ich werde die Links bekommen.

+0

Danke für die Vorschläge. Ich kann Excel nicht komplett fallen lassen, weil dieses Projekt zeitkritisch ist, der Python-Code von jemand anderem entwickelt wird und ich eine einfache Schnittstelle für diesen Code entwickeln muss und ich habe keine Erfahrung mit Python. Der beste Weg für mich ist die Verwendung von VBA. Vielleicht denke ich das in Zukunft. Trotzdem danke. –

+0

Ich kann DataNitro empfehlen. Ausgezeichnete Integration. Bit teuer aber – Joop

1

Sie können auch versuchen, ExcelPython, mit denen Sie Python-Objekt und Call-Code von VBA manipulieren können.

-1

Try this:

retVal = Shell("python.exe <full path to your python script>", vbNormalFocus) 

ersetzen <full path to your python script> mit dem vollständigen Pfad

+0

sollte sagen, RetVal = Shell ("python.exe ", VbNormalFocus) und ersetzen mit dem vollständigen Pfad zu Ihrem Skript. –