2013-10-21 9 views
5

यह एक खिंचाव का थोड़ा सा हो सकता है, लेकिन क्या संभावना है कि एक पाइथन लिपि का उपयोग एमएस एक्सेल (या वीबीए का उपयोग करने वाले किसी भी अन्य एमएस ऑफिस उत्पाद) में वीबीए बनाने के लिए किया जा सकता है, जिसमें पाइथनविन या किसी अन्य मॉड्यूल का उपयोग किया जाता है।वीबीए स्क्रिप्ट लिखने के लिए पायथन का उपयोग करें?

जहां यह विचार आया था, वह पॉलीथॉन ओपनपीक्सएल मॉड्यूल कॉलम ऑटोविड्थ करने में अक्षमता थी। स्क्रिप्ट मैंने स्मृति में एक कार्यपुस्तिका बनाई है और अंततः इसे डिस्क पर सहेजती है। कुछ चादरें हैं और प्रत्येक शीट के भीतर, कुछ कॉलम हैं। मुझे सोचने के लिए .... क्या होगा अगर मैं एक्सेल में वीबीए संपादक में एक वीबीए स्क्रिप्ट (नोटपैड या कुछ में सहेजा गया) आयात करने के लिए पाइथन का उपयोग करता हूं और फिर उस स्क्रिप्ट को पायथन से पाइथन से चलाता हूं।

कुछ की तरह:

Workbooks.worksheets.Columns("A:Z").EntireColumn.Autofit 

इससे पहले कि आप टिप्पणी, कैसे ऑटो openpyxl में स्तंभों को एडजस्ट करने के आस-पास काम करने के लिए की pythonic उदाहरण के हाँ मैंने देखा है बहुत सारे हैं, लेकिन मैं कुछ रोचक अवसरों कि कार्यक्षमता का उपयोग किया जा सकता है देखते हैं आप वीबीए से प्राप्त करते हैं जो कि पाइथन में उपलब्ध नहीं हो सकता है।

वैसे भी, मैंने इंटरनेट के चारों ओर खोद दिया और मुझे कुछ भी नहीं मिला जो इंगित करता है कि मैं कर सकता हूं, इसलिए मैंने सोचा कि मैं पूछूंगा।

चीयर्स, माइक

+0

हां, आप किसी अन्य भाषा में प्रोग्राम लिखने के लिए पाइथन का उपयोग कर सकते हैं, सबसे अधिक संभावना है, _any_ अन्य भाषा। – martineau

+2

यदि आप ऑटो फिट चलाने के लिए एक्सेल को आग लगाने जा रहे हैं, तो आप स्वचालन के माध्यम से पूरी चीज बना सकते हैं। तो आपको गतिशील कोड पीढ़ी नहीं करना पड़ेगा ... –

+0

भले ही यह सवाल थोड़ा धूलदार हो, हो सकता है कि यह मदद कर सके: https://www.pyxll.com/docs/macros.html – AnyOneElse

उत्तर

5

हाँ, यह संभव है। आप that Microsoft KB पर वीबी से वीबीए मैक्रो उत्पन्न करने के तरीके को देखना शुरू कर सकते हैं।

नीचे पाइथन कोड यह दिखा रहा है कि आप यह कैसे कर सकते हैं; यह KB नमूना कोड की पहली छमाही की एक बुनियादी बंदरगाह है:

import win32com.client as win32 

import comtypes, comtypes.client 

xl = win32.gencache.EnsureDispatch('Excel.Application') 
xl.Visible = True 
ss = xl.Workbooks.Add() 
sh = ss.ActiveSheet 

xlmodule = ss.VBProject.VBComponents.Add(1) # vbext_ct_StdModule 

sCode = '''sub VBAMacro() 
     msgbox "VBA Macro called" 
     end sub''' 

xlmodule.CodeModule.AddFromString(sCode) 

आप दिखाई स्वचालित एक्सेल मैक्रो देख सकते हैं, और आप VBAMacro ऊपर परिभाषित देखेंगे।

+0

मेरे पास अवसर है कोड को आजमाने और परीक्षण करने के लिए आज। योगदान के लिए बहुत बहुत धन्यवाद। यह मुझे सही दिशा में कदम दे रहा है। मेरे पास कई अन्य विचार हैं जिनके साथ यह कोड मदद कर सकता है। – Mike

+0

@ माइक आपका स्वागत है – Boud

+0

मैं सोच रहा हूं। मैं अपने कोड में openpyxl का उपयोग कर रहा हूं और मैं इसे बदलना नहीं चाहता हूं। मैं सोच रहा हूं कि, मैं अपना पूरा कोड चला सकता हूं और कार्यपुस्तिका बना सकता हूं और इसे डिस्क पर सहेज सकता हूं। क्या कोई तरीका है कि मैं अपने कोड के अंत में उस कार्यपुस्तिका को पकड़ सकता हूं और Win32 का उपयोग करके अपना कोड चला सकता हूं और उस बिंदु पर उपप्रोसेसर में जोड़ सकता हूं? मैं Win32 के साथ एक मौजूदा एक्सेल शीट खोलने के साथ संघर्ष कर रहा हूं, जैसा आपने उपरोक्त किया है, EnsureDispatch का उपयोग करके एक उदाहरण खोलने के बजाय आओ। – Mike

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