मैं कुछ कच्चे डेटा को पावरशेल के साथ एक नई एक्सेल फ़ाइल में रखना चाहता हूं। मुझे पता है कि कॉमोबजेक्ट एक्सेल का उपयोग कैसे करें। वह एप्लिकेशन जो पावरशेल डिलीवर करता है।

अब मेरी समस्या यह है कि डेटा को एक्सेल के अंदर विभिन्न तरीकों से संसाधित किया जाना है (जबकि स्क्रिप्ट चल रही है)। मैंने कुछ समय पहले ऐसा करने के लिए कुछ वीबीए मैक्रोज़ बनाए हैं और अब मैं उनका पुन: उपयोग करना चाहता हूं। क्या नव निर्मित और भरे हुए एक्सेल के अंदर स्क्रिप्ट के माध्यम से वीबीए का "उपयोग" करना संभव है? या क्या मुझे पावरहेल में वीबीए को फिर से बनाने की ज़रूरत है?

1
TheLinkedOne 7 जिंदा 2020, 18:15

1 उत्तर

सबसे बढ़िया उत्तर

अनिवार्य रूप से, वीबीए एक ऐसी भाषा है जो एक्सेल ऑब्जेक्ट लाइब्रेरी से जुड़ती है। पावरशेल भी एक ऐसी भाषा है जो एक्सेल ऑब्जेक्ट लाइब्रेरी से जुड़ सकती है। अभी भी Java, C#, पायथन, PHP, R, और अन्य के पास कंपोनेंट ऑब्जेक्ट मॉडल (COM) विंडोज वातावरण में उपलब्ध है।

इसलिए, बस अपने VBA कोड को किसी भी एक्सेल विधि उपलब्ध होनी चाहिए। वीबीए एमएस ऑफिस उत्पादों से जुड़ा हुआ है क्योंकि यह डिफैक्टो कनेक्टेड भाषा है लेकिन वास्तव में एक अलग घटक है (देखें कि आईडीई में Tools\References... के तहत इसे पहली बार संदर्भ कैसे चेक किया जाता है)। नीचे सरल VBA से PowerShell अनुवाद के उदाहरण दिए गए हैं:

  1. कार्यालय के ऑब्जेक्ट प्रारंभ करें

    • वीबीए

      ' अर्ली बाइंडिंग  xlObj = नया एक्सेल सेट करें। आवेदन  accObj = नया एक्सेस सेट करें। आवेदन  wrdObj = नया शब्द सेट करें। आवेदन  ...   लेट बाइंडिंग  xlObj = CreateObject ("Excel.Application") सेट करें  accObj सेट करें = CreateObject ("एक्सेस। एप्लिकेशन")  wrdObj = CreateObject ("Word.Application") सेट करें  ...  
    • पावरशेल

      $xlObj = new-object -comobject excel.application  $accObj = new-object -comobject access.application  $wrdObj = new-object -comobject word.application  ...  
  2. एक्सेल के के साथ ओपन ऑफिस ऑब्जेक्ट Workbooks.Open, Access' OpenCurrentDatabase< /a>, वर्ड का Documents.Open . नोट: इनमें से कोई भी तरीका VBA तक सीमित नहीं है।

    • वीबीए

      सेट xlWB = xlObj.Workbooks.Open("C:\Path\To\Workbook.xlsx")  सेट accDB = accObj.OpenCurrentDatabase("C:\Path\To\Access.accdb")  WrdDOC = wrdObj.Documents.Open("C:\Path\To\Document.docx") सेट करें  ...  
    • पावरशेल

      $xlWB = $xlObj.Workbooks.Open("C:\Path\To\Workbook.xlsx")  $accDB = $accObj.OpenCurrentDatabase("C:\Path\To\Access.accdb")  $wrdDOC = $wrdObj.Documents.Open("C:\Path\To\Document.docx")  ...  
  3. संग्रहों को संभालें (उदा., एक्सेल शीट, एक्सेस टेबल, वर्ड पैराग्राफ)।

    • वीबीए

      ' सिंगल ऑब्जेक्ट चुनें  सेट xlSheet = xlWB.Worksheets("mySheet")  सेट करें accTable = accObj.Currentdb().TableDefs("myTable")  सेट करें wrdParag = wrdDOC.पैराग्राफ(1)  ...  
    • पावरशेल

      # EXCEL WORKSHEETS LOOP  $xlObj = नई वस्तु -comobject excel.application   $xlWB = $xlObj.Workbooks.Open("C:\Path\To\Workbook.xlsx")   Foreach($wsh में $xlWB.Worksheets)  {     लिखें-होस्ट $wsh.name  }   $xlWB.बंद करें($झूठा)  $xlObj.quit()   [System.Runtime.Interopservices.Marshal]::ReleaseComObject($xlObj)    # एक्सेस डीबी टेबल लूपLO  $accObj = new-object -comobject access.application  $accDB = $accObj.OpenCurrentDatabase("C:\Path\To\Access.accdb")   Foreach($accObj.CurrentDb() में $tbl। TableDefs ())  {     लिखें-होस्ट $tbl.name  }   $accDB.DoCmd.CloseDatabase  $accObj.quit()   [System.Runtime.Interopservices.Marshal]::ReleaseComObject($accObj)  
1
Parfait 8 जिंदा 2020, 17:29