2012-09-11 17 views
14

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

System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

ऊपर से त्रुटि की उम्मीद है क्योंकि लक्ष्य मशीन पर कोई एक्सेल नहीं है।
मेरा सवाल है, क्या लक्ष्य प्रोग्राम पर इंटरऑप डीएल पंजीकृत करने के अलावा मेरे प्रोग्राम का उपयोग करने का कोई अन्य तरीका है?

उत्तर

15

My question is, is there any other way to use my program apart from registering Interop dll on target machine?

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

यदि आप Excel का संस्करण 2007 को लक्षित कर रहे हैं तो आप माइक्रोसॉफ्ट द्वारा प्रदान किए गए OOXml SDK का उपयोग कर सकते हैं। यदि आप थोड़ा पैसा खर्च करने के इच्छुक हैं तो आप Aspose जैसे किसी तृतीय पक्ष लाइब्रेरी का भी उपयोग कर सकते हैं।

एक्सेल फ़ाइल में स्प्रेडशीट डालने के लिए ओओएक्सएमएल एसडीके का उपयोग करने का एक उदाहरण msdn पर पाया जा सकता है।

// Given a document name, inserts a new worksheet. 
public static void InsertWorksheet(string docName) 
{ 
    // Open the document for editing. 
    using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true)) 
    { 
     // Add a blank WorksheetPart. 
     WorksheetPart newWorksheetPart = spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>(); 
     newWorksheetPart.Worksheet = new Worksheet(new SheetData()); 

     Sheets sheets = spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>(); 
     string relationshipId = spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart); 

     // Get a unique ID for the new worksheet. 
     uint sheetId = 1; 
     if (sheets.Elements<Sheet>().Count() > 0) 
     { 
      sheetId = sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1; 
     } 

     // Give the new worksheet a name. 
     string sheetName = "Sheet" + sheetId; 

     // Append the new worksheet and associate it with the workbook. 
     Sheet sheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName }; 
     sheets.Append(sheet); 
    } 
} 
+1

धन्यवाद। मैं ओपनएक्सएमएल की ओर बढ़ने के कारणों को समझता हूं, लेकिन दुख की बात है कि मुझे अन्य कारणों से इंटरऑप पर वापस रहना होगा। इस मुद्दे को हल करने के लिए, मैं अपने कार्यक्रम के लिए एक्सेल (पूर्व शर्त के रूप में) स्थापित कर रहा हूं। – Mahender

0

का उपयोग कर सभी अनुसंधान मैंने कुछ समय पहले किया था से पहले अपने कॉम रजिस्टर करने के लिए बाध्य कर रहे हैं सर्वर पर एक एक्सेल फ़ाइल, आपको Office को स्थापित करना होगा।

12

यहां तक ​​कि Microsoft does not recommends usein Interop libraries on a server। आपके लिए एक्सेल करने के लिए कुछ वैकल्पिक ढांचे को ढूंढना सबसे अच्छा है। मैंने उस उद्देश्य के लिए अतीत में Npoi सफलतापूर्वक उपयोग किया है।

मुझे पता है कि यह आपके अपवाद का उत्तर नहीं है। लेकिन ईमानदारी से, इंटरऑप एक अंतहीन परेशानी और गुप्त अपवाद संदेशों का मार्ग है।

अद्यतन 2017: - OpenXML है कि आप आधुनिक xlsx फ़ाइलें बनाता है के आधार पर पुस्तकालय मैं NPOI थोड़ी देर के लिए अब इस्तेमाल किया है नहीं और EPPlus करने के लिए अपने सभी परियोजनाओं में ले जाया गया insted।

+3

एनपीईई के लिए +1। मैंने पाया है कि एक्सेल दस्तावेज़ों के साथ काम करने के लिए सबसे अच्छी मुफ्त पुस्तकालय बनना है। .xls और xlsx दोनों के साथ काम करता है। Npoi के लिए – burnttoast11

+2

+1, और "इंटरऑप एक अंतहीन परेशानी और गुप्त अपवाद संदेशों का मार्ग है।" हाँ यह वास्तव में दर्द होता है। विवरण के लिए – NeverHopeless