2010-02-10 17 views
12

पर्यावरण:Excel 2007 के साथ ऑफिस ऑटोमेशन करने के लिए कोशिश कर रहा है, लेकिन Excel 2003 उपयोग करना जारी रखता

Windows XP मशीन
दोनों Excel 2007 और Excel 2003 स्थापित (इसी क्रम में, कालक्रम के अनुसार नहीं)।
# 3.5 सी

समस्या:

जब मैं पीआईए का उपयोग कुछ कार्यालय स्वचालन करने के लिए, मैं कोड की निम्न पंक्ति का उपयोग करें:

var excel = new ApplicationClass(); 

पिया के संस्करण विशेष रूप से के रूप में यह को संदर्भित करता है एक्सेल 12.
C: \ WINDOWS \ विधानसभा \ GAC \ Microsoft.Office.Interop.Excel \ 12.0.0.0__71e9bce111e9429c \ Microsoft.Office.Interop.Excel.dll
लेकिन:

excel.Version;//this is 11.0 instead of 12.0 
इस प्रकार

, जब मैं विस्तार .xlsx के साथ एक फ़ाइल को खोलने का प्रयास, यह मेरे फ़ाइल रूपांतरण में खो कार्यक्षमता के बारे में चेतावनी देते हैं, और एक्सेल 2003 के साथ खुलता है मैं बहुत यकीन है कि यह स्थापित के साथ क्या करना है कर रहा हूँ आदेश जा रहा है 2007 -> 2003, लेकिन मैं अपने मशीन 2003 की स्थापना रद्द नहीं कर सकते b/c हम 2003

मैं Policy.11.0 देखा है एक्सेल का उपयोग करता है एक असंबंधित परियोजना के लिए हमारे वेबसर्वर पर कुछ कार्यालय स्वचालन है सामान .Microsoft.Office.Interop.Excel.config, लेकिन यह

<bindingRedirect oldVersion="11.0.0.0" newVersion="12.0.0.0"></bindingRedirect> 

तो कहते हैं, मैं एक नुकसान में हूँ। मैं COM इंटरऑप क्यों नहीं कह सकता कि एक्सेल का संस्करण किस प्रकार उपयोग करेगा?

+0

आप Excel 2007 की मरम्मत चल रहा है और देखते हैं कि अगर यह rectifies कोशिश कर सकता है? – x0n

+0

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

+0

यह पीआईए नहीं बदलेगा। आप सुनिश्चित करने के लिए जीएसी की जांच कर सकते हैं, लेकिन यह 99.99% निश्चित है कि आपके पास पहले से ही आपकी मशीन पर एक्सेल 2003 और एक्सेल 2007 पीआईए दोनों हैं। तो मरम्मत करने के द्वारा पीआईए सेटअप नहीं बदलेगा। लेकिन एक सुधार को Excel 2003 के बजाय वर्तमान संस्करण Excel 2007 बनाने के लिए रजिस्ट्री को ठीक करना चाहिए। अधिक जानकारी के लिए नीचे मेरा उत्तर देखें। –

उत्तर

23

आप एक्सेल के किस संस्करण का उपयोग करने के लिए प्रोग्रामेटिक रूप से कमांड नहीं कर सकते हैं। पीआईए केवल उन्हीं इंटरफेस, या ऑब्जेक्ट मॉडल को निर्देशित करते हैं, जिनके खिलाफ आप विकास कर रहे हैं। लेकिन एक्सेल का कौन सा संस्करण वास्तव में चल रहा है रजिस्ट्री द्वारा नियंत्रित किया जाता है।

यह पीआईए चल की बात आती है, हालांकि, आप वास्तव में उच्चतम स्तर के पिया सिस्टम पर स्थापित के खिलाफ चलेगा। तो यदि आप एक्सेल 2003 पीआईए के खिलाफ विकसित होते हैं, लेकिन क्लाइंट में एक्सेल 2007 पीआईए के साथ एक्सेल 2007 है, तो आपका कोड एक्सेल 2007 पीआईए के खिलाफ चलाएगा - और इसे ठीक चलाना चाहिए, क्योंकि एक्सेल 2007 पीआईए पिछड़ा संगत है। यही है, प्रत्येक उच्च संख्या वाले पीआईए संस्करण (और एक्सेल ऑब्जेक्ट मॉडल) पुराने पीआईए और पुराने एक्सेल ऑब्जेक्ट मॉडल के खिलाफ संकलित आदेशों के लिए पिछड़ा संगत है। ध्यान दें कि यदि क्लाइंट में मशीन पर एक्सेल 2007 और एक्सेल 2003 पीआईए दोनों थे, तो एक्सेल के कौन से संस्करण चल रहे हैं, इस पर ध्यान दिए बिना उच्च संस्करण वाला पीआईए लोड होगा - इसलिए एक्सेल 2007 पीआईए चलाएगा, यदि दोनों पीआईए उपलब्ध थे।

[संपादित करें: एक चेतावनी यह है कि एक्सेल 2007 पीआईए VB.NET या C# 4.0 का उपयोग करते समय 100% पिछड़ा संगत होना चाहिए। यदि सी # 3.0 या उससे नीचे का उपयोग करते हैं, तो तथ्य यह है कि वैकल्पिक पैरामीटर वास्तव में आवश्यक हैं जब सी # 3.0 या उससे नीचे बुलाए जाने पर उच्च-संस्करण पीआईए या ऑब्जेक्ट मॉडल के खिलाफ चलते समय कुछ कोड में ब्रेक बन जाएगा। यह अपेक्षाकृत दुर्लभ है, और सी # 4.0 के साथ, इस मुद्दे को सिद्धांत में दूर जाना चाहिए।]

ठीक है, इसलिए आपके पास पीआईए पर बहुत अधिक नियंत्रण नहीं है क्योंकि आपके द्वारा विकसित पीआईए वास्तव में नहीं है नियंत्रण जो पीआईए वास्तव में क्लाइंट मशीन पर चल रहा है।

आपके पास एक्सेल के कौन से संस्करण को लॉन्च किया गया है, इस पर बहुत अधिक नियंत्रण नहीं है।उदाहरण के लिए, जब आप एक नया एक्सेल उदाहरण बनाते हैं:

Excel.Application excelApp = new Application(); 

लोड किया गया एक्सेल एप्लिकेशन रजिस्ट्री में वर्तमान संस्करण सेट के अनुसार सेट किया गया है। वर्तमान संस्करण को बचाया पर है:

HKEY_CLASSES_ROOT\Excel.Application\CurVer 

यह Excel.Application.12 'के स्थान पर, अपने मामले' Excel.Application.11 'का डिफ़ॉल्ट मान होगा में' CurVer 'कुंजी की तरह दिखता है। इसे अकेले बदलना चाल हो सकता है, लेकिन मैं यह सुनिश्चित करने के लिए मरम्मत करना पसंद करूंगा कि सभी रजिस्ट्री सेटिंग्स ठीक से ठीक हो जाएं। (और मैं संभवतः यह जान सके कि नहीं क्या सभी सेटिंग्स होना चाहिए।) ठीक है, मैं सिर्फ पाया एक और एक: आप यह भी परिवर्तित करने की आवश्यकता होगी:

[HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\ProgID] 

"Excel.Application.12" का मान धारण करने के लिए । लेकिन मैं दृढ़ता से मरम्मत की सिफारिश करने की सिफारिश करता हूं। मुझे नहीं पता कि अन्य सेटिंग्स को बदलने की आवश्यकता हो सकती है, इसलिए हाथ से उन्हें बदलना थोड़ा जोखिम भरा है।

इसके अलावा, आप के रूप में अच्छी निम्नलिखित कुंजी खोजना चाहिए:

HKEY_CLASSES_ROOT\Excel.Application.11 
HKEY_CLASSES_ROOT\Excel.Application.12 

क्योंकि इन Excel के संस्करण है कि आप स्थापित किया है कर रहे हैं।

(एक आगे की चर्चा के लिए here देखें।)

मैं बहुत यकीन है कि यह से कोई लेना देना क्रम जा रहा है 2007 को स्थापित किया गया है कर रहा हूँ -> 2003

हाँ, यह 100% सही है । आप एक्सेल 2007 पर मरम्मत चलाने का प्रयास कर सकते हैं, यह करना सबसे आसान काम होगा। यदि यह काम नहीं करता है, तो मैं दोनों को अनइंस्टॉल कर दूंगा और फिर उन्हें दोबारा इंस्टॉल कर दूंगा। मैं एक्सेल 2003 को अनइंस्टॉल कर दूंगा और फिर 2007 को अनइंस्टॉल करूँगा (जिस क्रम में आपने उन्हें इंस्टॉल किया था) को उलट दें और फिर एक्सेल 2003 स्थापित करें और फिर एक्सेल 2007 स्थापित करें ताकि आप दोनों संस्करणों को सही क्रम में इंस्टॉल कर रहे हों।

लेकिन ध्यान रखें कि ऐसा करके, जब आप Excel.Application excelApp = new Application() पर कॉल करते हैं तो Excel 2007 डिफ़ॉल्ट रूप से चलाया जाएगा।

वास्तविक सिफारिश अभ्यास नहीं डेवलपर की मशीन पर चल एक्सेल के दोनों संस्करणों है। इस बारे में अधिक के लिए देखें:

मैं अपने ही विकास मशीन पर एक्सेल के कई संस्करण किया करते थे, और मैं व्यक्तिगत रूप से महसूस किया है कि कमियां थे इन लेखों के रूप में जटिल नहीं है यह ध्वनि बनाते हैं। सामान्यतः, एक्सेल 2007 पीआईए एक्सेल 2003 पीआईए के लिए पिछड़ा-संगत है और सब कुछ ठीक काम करता है। लेकिन मैं एक बार आपके जैसा रजिस्ट्री गड़बड़ में आया और "सही काम करने" का फैसला किया। मैंने दोनों को अनइंस्टॉल किया और फिर केवल Excel 2007 को पुनः स्थापित किया।

वहां से मैंने वर्चुअल पीसी स्थापित किया, जो मुफ़्त है (वीएम वेयर वास्तव में थोड़ा बेहतर है, लेकिन यह मुफ़्त नहीं है) और फिर 2003 के लिए Excel के मेरे निचले संस्करण स्थापित किए , 2002, 2000, और '97 अलग-अलग वीएम पर। यह निश्चित रूप से स्थापित करने के लिए कुछ काम है, लेकिन एक बार ऐसा करने के बाद, सब कुछ 100% साफ है।

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

आशा है कि इससे मदद मिलती है!

माइक

+0

यह जानकारी का अविश्वसनीय धन है, धन्यवाद। मेरी एकमात्र चिंता यह थी कि हमारी वेबसाइट पर मौजूद वेबसर्वर में एक्सेल 2007 पीआईए नहीं है। यह केवल 2003 तक है। मुझे इसे आजमा देना होगा और देखें कि क्या यह काम करता है। मुझे लगता है कि मेरे बीए प्रदान किए गए टेम्पलेट को 2003-संगत .xls बी/सी में डाउनग्रेड किया जा रहा है, यह प्रबंधक के अनुसार कम-प्रतिरोधी पथ था। अगर मुझे मौका मिलता है, तो मैं निश्चित रूप से कोशिश करूँगा। –

+0

खुशी है कि यह मदद करता है। :-) इस मामले में आपको * अपने विकास मशीन पर 2003 पीआईए का संदर्भ देने में सक्षम होना चाहिए और आप ठीक होंगे। ध्यान रखें, हालांकि, कि जब आप वास्तव में चलाने के लिए और डिबग, तुम क्योंकि यह लगता है कि आप अपने सिस्टम पर दोनों 2003 और 2007 पीआईए है * 2007 पीआईए के खिलाफ चल रहा * हो जाएगा। हालांकि, यह ठीक चलना चाहिए, क्योंकि पीआईए पीछे की ओर संगत हैं। जब आप एक्सेल 2003 सिस्टम पर तैनात करते हैं, हालांकि, उच्चतम स्तर पीआईए 2003 पीआईए होना चाहिए, और यही वह है जो इसके खिलाफ होगा। हालांकि यह सब "सिद्धांत में" है - यह परीक्षण करने के लिए सबसे अच्छा है। –

+0

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

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