2013-08-08 7 views
17

cercando di chiamare uno script python su Vba e io sono un newb. Ho provato a convertire lo script principale in un exe usando py2exe e poi chiamandolo da VBA (shell) ma lo script principale chiama altri script quindi diventa complicato e l'ho incasinato (il mio exe non funziona). Inoltre, lo script principale è un file di grandi dimensioni e non voglio rivederlo molto.Come chiamare lo script python su excel vba?

Bottomline, c'è un modo per chiamare lo script principale da excel vba, senza convertire lo script in un file exe.

Finora, ho provato:

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

Si inizia python.exe ma non fa niente altro. Poi ho provato:

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

Si inizia prompt dei comandi, ma non ancora di iniziare pitone.

P.S. Ho controllato tutte le domande relative nel forum, non risolvono il mio problema.

risposta

14

Prova questa:

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

O se lo script python si trova nella stessa cartella del lavoro, allora si può provare:

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

Tutti i dettagli all'interno <> sono da dare. <> - indica campi modificabili

Immagino che questo dovrebbe funzionare. Ma poi di nuovo, se il tuo script chiama altri file che si trovano in cartelle diverse, può causare errori a meno che il tuo script non lo abbia gestito correttamente. Spero che sia d'aiuto.

+0

Ho già provato queste. Avvia l'interprete python ma non fa nient'altro. Credo che "shell" esegua solo i file exe e non mi consente di eseguire il mio script. –

+3

Scusa, non so cosa ho sbagliato in precedenza. Ha funzionato ora. Molte grazie! Ho usato: RetVal = Shell ("C: \ python27 \ python.exe C: \ Python27 \ CallOptimizer.py") –

+0

@EgeOzlem potresti per favore condividere un esempio del tuo script python, che hai eseguito da VBA? e cosa era ritornato alla chiamata VBA? – ggupta

4

ci sono un paio di modi per risolvere questo problema

Pyinx - uno strumento piuttosto leggero che consente di chiamare Python da withing spazio processo di Excel http://code.google.com/p/pyinex/

Ho usato questo uno alcuni anni fa (indietro quando è stato attivamente sviluppato) e ha funzionato abbastanza bene

Se non vi dispiace pagare, questo sembra piuttosto buono

https://datanitro.com/product.html

ho mai usato, però


Anche se si è già scrittura in Python, forse si potrebbe cadere eccellere del tutto e fare tutto in puro Python? È molto più semplice mantenere un code base (python) piuttosto che 2 (python + qualsiasi overlay excel che possiedi).

Se davvero devi esportare i tuoi dati in excel ci sono anche degli ottimi strumenti per farlo in Python. Se questo può funzionare meglio fammi sapere e otterrò i link.

+0

Grazie per i suggerimenti. Non posso lasciare Excel completamente perché questo progetto è sensibile al tempo, il codice Python è sviluppato da qualcun altro e ho bisogno di sviluppare una semplice interfaccia per questo codice e non ho esperienza in Python. Il modo migliore per me è utilizzare VBA. Forse, in futuro, potrei considerarlo. Grazie comunque. –

+0

Posso consigliare DataNitro. Ottima integrazione. Un po 'costoso sebbene – Joop

1

È anche possibile provare ExcelPython che consente di manipolare l'oggetto Python e il codice di chiamata da VBA.

-1

Prova questo:

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

sostituire <full path to your python script> con il percorso completo

+0

dovrebbe dire RetVal = Shell ("python.exe ", vbNormalFocus) e sostituire con il percorso completo del tuo script. –