2009-03-26 16 views
5

निम्नलिखित कोड Powershell V1 में एक अपवाद (Excel 2007) फेंकता पुस्तकालय वैध नहीं है (स्पेनिश से अनुवादित)। वर्ड के लिए एक समान लिपि बस ठीक काम करता है।अपवाद Powershell के साथ Excel 2007 स्वचालित जब Workbooks.Add बुला()

+0

क्या विधि जोड़ें उनमें से एक वैकल्पिक पैरामीटर लेता है? यदि ऐसा है, तो आपको Type.EmptyType या जो भी हो, आपूर्ति करनी पड़ सकती है। इसे सी # से कॉल करने के लिए देखें (जिसमें v4.0 तक कोई वैकल्पिक पैरामीटर समर्थन नहीं है)। –

+0

मेरे अनुभव में, Office संस्करण के आधार पर वैकल्पिक पैरामीटर के लिए गुम प्रकार का उपयोग करने की आवश्यकता नहीं है, लेकिन उदाहरण के लिए Word 2007 को Office XP के विपरीत, पीएस में [ref] के रूप में पारित होने की आवश्यकता होती है। – guillermooo

उत्तर

3

MS Help and Support Article 320369 में प्रस्तावित समाधानों में से एक से Powershell के लिए अनुकूलित।

जब आप किसी कंप्यूटर जहां क्षेत्रीय सेटिंग कार्यालय की वर्तमान भाषा संस्करण से मेल नहीं खाते के लिए इन समाधानों में से एक का उपयोग करें, आप कैसे से परिचित होना चाहिए:

$ci = new-object system.globalization.cultureinfo "en-US" 

$e = New-Object -COM "Excel.Application" 
$e.Visible = $True 
$e.UserControl= $True 
$books = $e.Workbooks 
$books.PSBase.GetType().InvokeMember(` 
     "Add", ` 
     [system.reflection.bindingflags]::InvokeMethod, ` 
     $null, $books, $null, $ci) 
एक ही लेख से

एक्सेल व्यवहार करता है और कैसे Excel डेटा की व्याख्या करेगा जो के लिए एक विशिष्ट लोकेल के लिए स्वरूपित किया जा सकता है।

9

कार्यालय इंटरऑप असेंबली में यह समस्या प्रतीत होती है जब वर्तमान संस्कृति एन-यूएस नहीं है। स्पष्ट कार्यवाही संस्कृति को स्थापित करना है।

इंटरैक्टिव कंसोल पर एक ही कमांड के रूप में पूरी चीज को चलाने के लिए महत्वपूर्ण है, क्योंकि PowerShell V1 हमेशा प्रत्येक कमांड आमंत्रण के लिए एक नया धागा बनाता है।

PS C:\Users\jachymko> $e = new-object -com excel.application 
PS C:\Users\jachymko> $e.workbooks.add() 
Exception calling "Add" with "0" argument(s): "Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))" 
At line:1 char:17 
+ $e.workbooks.add <<<<() 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : ComMethodTargetInvocation 

PS C:\Users\jachymko> & { 
>> [threading.thread]::CurrentThread.CurrentCulture = 'en-US' 
>> $e = new-object -com excel.application 
>> $e.workbooks.add() 
>> $e.visible=1 
>> } 
>> 
+0

मैं इसे बाद में आज़मा दूंगा, लेकिन मैंने सोचा था कि पीएसवी 1 ने केवल एक प्रक्रिया और एक थ्रेड का उपयोग किया है? ... – guillermooo

+0

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

+0

आपका समाधान मेरे लिए काम नहीं कर रहा है ... मुझे एक ही त्रुटि मिल रही है। – guillermooo

2

कार्यपुस्तिका खोलने का प्रयास करते समय मुझे यह समस्या थी। मैंने यह लाइन जोड़ा:

[threading.thread]::CurrentThread.CurrentCulture = 'en-US' 
संबंधित मुद्दे