2013-08-08 7 views
17

वीबीए पर एक पायथन लिपि कॉल करने की कोशिश कर रहा है और मैं एक नया हूँ। मैंने मुख्य स्क्रिप्ट को py2exe का उपयोग करके एक्सई में परिवर्तित करने की कोशिश की और फिर इसे वीबीए (खोल) से बुलाया लेकिन मुख्य स्क्रिप्ट अन्य स्क्रिप्ट्स को कॉल करती है इसलिए यह जटिल हो जाती है और मैंने इसे गड़बड़ कर दिया (मेरा exe कार्यात्मक नहीं है)। इसके अलावा, मुख्य लिपि एक बड़ी फाइल है और मैं इसे बहुत संशोधित नहीं करना चाहता हूं।एक्सेल vba पर पायथन स्क्रिप्ट कैसे कॉल करें?

नीचे की ओर, स्क्रिप्ट को एक्सेल फ़ाइल में कनवर्ट किए बिना एक्सेल vba से मुख्य स्क्रिप्ट को कॉल करने का कोई तरीका है।

अब तक, मैंने कोशिश की:

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

यह python.exe शुरू होता है, लेकिन कुछ नहीं करता है। फिर मैंने कोशिश की:

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

यह कमांड प्रॉम्प्ट शुरू करता है लेकिन पाइथन भी शुरू नहीं करता है।

पीएस मैंने मंच में सभी संबंधित प्रश्नों की जांच की, वे मेरी जांच को हल नहीं करते हैं।

उत्तर

14

इस प्रयास करें:

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

या अगर अजगर स्क्रिप्ट कार्यपुस्तिका को उसी फ़ोल्डर में है, तो आप की कोशिश कर सकते हैं:

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

<> के भीतर सभी विवरण दिया जा सकता है। <> - बदलने योग्य फ़ील्ड इंगित करता है

मुझे लगता है कि यह काम करना चाहिए। लेकिन फिर, यदि आपकी स्क्रिप्ट अन्य फ़ाइलों को कॉल करने जा रही है जो अलग-अलग फ़ोल्डरों में हैं, तो यह त्रुटियों का कारण बन सकती है जब तक कि आपकी स्क्रिप्ट ने इसे ठीक से संभाला नहीं है। आशा करता हूँ की ये काम करेगा। http://code.google.com/p/pyinex/

मैं इस में कुछ एक का उपयोग किया है एक बहुत हल्के उपकरण आपको एक्सेल प्रक्रिया अंतरिक्ष के भीतर से अजगर को कॉल करने की अनुमति देता है कि -

+0

मैं पहले से ही इन की कोशिश की के साथ <full path to your python script> बदलें। यह अजगर दुभाषिया शुरू करता है लेकिन कुछ और नहीं करता है। मेरा मानना ​​है कि "खोल" केवल exe फ़ाइलों को चलाता है और मुझे मेरी स्क्रिप्ट चलाने की अनुमति नहीं देता है। –

+3

क्षमा करें, मुझे नहीं पता कि मैंने पहले क्या किया था। यह अब काम किया। आपका बहुत बहुत धन्यवाद! मैंने उपयोग किया: RetVal = शैल ("सी: \ python27 \ python.exe सी: \ Python27 \ CallOptimizer.py") –

+0

@EgeOzlem क्या आप कृपया अपनी पाइथन लिपि का एक नमूना साझा कर सकते हैं, जिसे आपने वीबीए से निष्पादित किया है? और यह वीबीए कॉल में क्या लौटा था? – ggupta

4

इस समस्या

Pyinx हल करने के तरीकों की एक जोड़ी रहे हैं साल पहले (वापस जब यह किया गया था सक्रिय रूप से विकसित किया जा रहा है) और यह बहुत अच्छी तरह से

आप का भुगतान कोई आपत्ति नहीं है काम किया, यह बहुत अच्छा लग रहा है

https://datanitro.com/product.html

मैं हालांकि


अगर आप पहले से अजगर में writting कर रहे हैं, हो सकता है आप ड्रॉप कर सकता है हालांकि पूरी तरह से उत्कृष्टता और शुद्ध अजगर में सब कुछ करने के लिए इसका इस्तेमाल किया कभी नहीं किया है? 2 (पायथन + जो भी एक्सेल ओवरले आपके पास है) के बजाय एक कोड बेस (पायथन) को बनाए रखना बहुत आसान है।

यदि आपको वास्तव में एक्सेल में अपना डेटा आउटपुट करना है तो पाइथन में इसके लिए कुछ अच्छे उपकरण भी हैं। अगर यह बेहतर काम कर सकता है तो मुझे बताएं और मुझे लिंक मिलेंगे।

+0

सुझावों के लिए धन्यवाद। मैं एक्सेल पूरी तरह से नहीं छोड़ सकता क्योंकि यह परियोजना समय संवेदनशील है, अजगर कोड किसी और द्वारा विकसित किया गया है और मुझे इस कोड के लिए एक सरल इंटरफ़ेस विकसित करने की आवश्यकता है और मुझे पायथन में अनुभव नहीं हुआ है। मेरे लिए सबसे अच्छा तरीका वीबीए का उपयोग कर रहा है। शायद, भविष्य में मैं उस पर विचार कर सकता हूं। हालांकि धन्यवाद। –

+0

मैं डेटानेट्रो की सिफारिश कर सकता हूं। उत्कृष्ट एकीकरण। बिट प्राइस हालांकि – Joop

1

आप ExcelPython भी कोशिश कर सकते हैं जो आपको पाइथन ऑब्जेक्ट में हेरफेर करने और वीबीए से कॉल कोड करने की अनुमति देता है।

-1

इस प्रयास करें:

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

पूरा पथ

+0

को RetVal = Shell ("python.exe ", vbNormalFocus) और अपनी स्क्रिप्ट के पूर्ण पथ के साथ को प्रतिस्थापित करना चाहिए। –

संबंधित मुद्दे