2011-11-24 13 views
7

पर काम नहीं करता है एमएस विजुअल वेब डेवलपर 2008 एक्सप्रेस एड पर विकसित होने पर मुझे एक समस्या आई है। विंडोज 7 64 बिट ओएस पर एएसपी.NET सी # विकसित करना।माइक्रोसॉफ्ट.ऑफिस.इंटरोप.एक्ससेल 64 बिट

मैं एक एक्सेल दस्तावेज़ खोलने के लिए कोशिश कर रहा हूँ, लेकिन यह मुझे देता है Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

मैं सभी प्रोसेसर (कोई भी सीपीयू, 64, 86) के निर्माण के लिए कॉन्फ़िगर किया था, लेकिन यह काम नहीं करता। मैंने इंटरनेट पर जवाब खोजा लेकिन यह पता नहीं लगा कि इसे कैसे संभाला जाए।

अजीब चीज एक ही सिस्टम पर उसी कोड पर काम करती है जब मैंने माइक्रोसॉफ्ट विजुअल सी # 2010 एक्सप्रेस पर विकसित किया था! कैसे? क्या यह वही डीएल काम नहीं कर रहा है?

क्या मुझे उस COM dll को बदलने की ज़रूरत है, तो यह x64 सिस्टम पर काम करेगा?

कृपया मेरी मदद करें, मैं क्या कर सकता हूं?

मेरे कोड है:

using Excel = Microsoft.Office.Interop.Excel; 
xlApp = new Excel.Application(); 
__Log("Openning " + excelFileName); 
xlWorkBook = xlApp.Workbooks.Open(excelFileName, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2); 
+0

मैं पूरी तरह से यकीन है कि यह आपकी समस्या का समाधान willl नहीं कर रहा हूँ, लेकिन अगर आप एक 32-बिट COM DLL है, तो आप शायद का एक x86 निर्माण उपयोग करने की आवश्यकता आपकी प्रोजेक्ट भले ही आप 64-बिट विंडोज़ पर चल रहे हों। – Andrew

+0

मुझे लगता है कि आपको सही विचार @Andrew मिला है। यदि यह 32 बिट एक्सेल है, तो 64 बिट .net इसके साथ काम नहीं करना चाहेंगे। इसे x86 के रूप में बनाएं और इसे काम करना चाहिए। –

+0

पहले से ही कोशिश की है .. लेकिन वही हुआ, मुझे नहीं पता कि यह समस्या विज़ुअल सी # में क्यों नहीं है और केवल वेब डेवलपर – Bush

उत्तर

19

इंटरनेट मुझे पता चला कि वहाँ एक (कम से कम मेरे मामले के साथ जो एमएस एक्सेल 2010 है) COM ऑब्जेक्ट के साथ Microsoft Interop में बग है कि खुदाई के बाद।

बग यह है कि .NET जांचता है कि आपका थ्रेड (सी # या वीबी कोड) स्थानीयकरण आपके द्वारा पहले स्थापित एमएस एक्सेल स्थानीयकरण के लिए उपयुक्त है, और यदि यह नहीं बताता है कि Microsoft.Office.Interop लाइब्रेरी पुरानी या अमान्य है।

आपका धागा स्थानीयकरण आपके कंप्यूटर क्षेत्रीय सेटिंग से ली गई है (नियंत्रण कक्ष से -> क्षेत्रीय और भाषा)

तो फिर वहाँ इस समस्या को हल करने के लिए दो विकल्प हैं:

  1. अपने धागा को बदलने के लिए (कोड) के द्वारा स्थानीयकरण
  2. अपने कार्यालय के लिए भाषा पैक स्थापित

पहला समाधान इस प्रकार है:

using System.Threading;  // For setting the Localization of the thread to fit 
using System.Globalization; // the of the MS Excel localization, because of the MS bug 

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
excelFileName = System.IO.Path.Combine(excelPath, "Ziperty Buy Model for Web 11_11_2011.xlsm"); 

आशा है कि यह :) में मदद करता है gr8 दिन

+0

में ... अधिक जानकारी के लिए, KB प्रविष्टि जो मेल खाता है: http://support.microsoft। com/default.aspx? scid = kb; en-us; 320369 – Otiel

+1

@Otiel: KB यह कहता है कि यह बग वीएस 2005 और एक्सेल 2007 (और पुराने संस्करण) पर लागू होता है। विवरण मिलान लगता है लेकिन यह एक असंबंधित बग हो सकता है। –