दिलचस्प पोस्ट
Scala में समझ-बूझ और छोरों को कैसे अनुकूलित करें? JQuery का उपयोग करके क्लिपबोर्ड पर क्लिप कॉपी करें क्लिक करें पासवर्ड की शक्ति को मान्य करने के लिए रेगेक्स JPanel ग्राफिक्स जी रंग ड्राइंग लाइन बदलने Scanf () और fgets () के बीच का अंतर बैकटीक और एकल उद्धरण के बीच अंतर क्या हैं? क्या मैं उपरोक्त प्रश्न में IF स्टेटमेंट का उपयोग कर सकता हूं? MVC वेब एपीआई: नहीं 'एक्सेस-कंट्रोल-अनुमति-उत्पत्ति' हेडर अनुरोधित संसाधन पर मौजूद है गोलोंग गोरटिनेन्स में अलग तरह से बंद क्यों करता है? मूल्य प्रारंभ और गैर पीओडी प्रकार Android प्रक्रिया हत्यारा जावा कोर डंप से जानकारी का विश्लेषण कैसे करें? ऐपस्टोर के बिना आईफोन ऐप क्या किसी स्ट्रिंग को किसी सरणी में कनवर्ट करने के लिए एक PHP फ़ंक्शन है? विंडोआईएनसेट क्या हैं? दो सूचियों के बीच अंतर

लाइव (सहेजे न किए गए) Excel डेटा और C # ऑब्जेक्ट के बीच इंटरफ़ेस का सबसे तेज़ तरीका

मैं जानना चाहता हूं कि खुली एक्सेल कार्यपुस्तिका को सी # ऑब्जेक्ट्स को डेटा पढ़ने और लिखने का सबसे तेज़ तरीका है पृष्ठभूमि यह है कि मैं एसी # एप्लिकेशन को विकसित करना चाहता हूं जो एक्सेल में उपयोग किया जाता है और Excel में आयोजित डेटा का उपयोग करता है।

व्यावसायिक तर्क सी # एप्लिकेशन में रहते हैं लेकिन डेटा Excel कार्यपुस्तिका में स्थित होगा। उपयोगकर्ता एक्सेल का उपयोग करेगा और सी # एप्लिकेशन को आरंभ करने के लिए एक्सेल वर्कबुक पर एक बटन (या कुछ इसी तरह से) पर क्लिक करेगा। सी # एप्लिकेशन तब एक्सेल वर्कबुक से डेटा पढ़ा, डेटा की प्रक्रिया करें, और फिर एक्सेल कार्यपुस्तिका में वापस डेटा लिखें।
डेटा के बहुत से ब्लॉकों हो सकते हैं जिन्हें पढ़ना और एक्सेल वर्कबुक पर वापस लिखे जाने की ज़रूरत होती है लेकिन वे आम तौर पर अपेक्षाकृत छोटे आकार के होंगे, 10 पंक्तियों और 20 कॉलम कहेंगे। कभी-कभी 50,000 पंक्तियों और 40 कॉलम के आदेश के लिए डेटा की एक बड़ी सूची पर कार्रवाई की आवश्यकता हो सकती है।

मुझे पता है कि यह वीएसटीओ का प्रयोग करना आसान नहीं है लेकिन मैं यह जानना चाहता हूं कि सबसे तेज़ (लेकिन अभी भी मजबूत और सुरुचिपूर्ण) समाधान क्या है और गति का एक विचार है मुझे कोई दिक्कत नहीं है कि समाधान तीसरे पक्ष के उत्पादों का उपयोग करने की सलाह देता है या सी ++ का उपयोग करता है

स्पष्ट समाधान VSTO या interop का उपयोग कर रहा है लेकिन मुझे नहीं पता कि प्रदर्शन बनाम वीबीए जैसा है, जो वर्तमान में मैं डेटा में पढ़ने के लिए उपयोग कर रहा हूं या अगर कोई अन्य समाधान है

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

http://www.experts-exchange.com/Microsoft/Development/VSTO/Q_23635459.html

धन्यवाद।

Solutions Collecting From Web of "लाइव (सहेजे न किए गए) Excel डेटा और C # ऑब्जेक्ट के बीच इंटरफ़ेस का सबसे तेज़ तरीका"

यदि सी # एप्लिकेशन एक स्टैंडअलोन आवेदन है, तो आप हमेशा क्रॉस-प्रोसेस मार्शलिंग में शामिल होंगे, जो कि आप ## से सी ++ से भाषाओं को स्विच करके कर सकते हैं। इस स्थिति में अपनी सबसे पसंदीदा भाषा में रहें, जो लगता है कि सी # है।

अगर आप ऐड-इन बनाने के लिए तैयार हैं जो एक्सेल में चलता है , फिर भी, आपके परिचालन क्रॉस प्रोसेस कॉल से बचेंगे और लगभग 50x तेज चलेंगे

यदि आप ऐड-इन के रूप में एक्सेल में चलाते हैं, तो वीबीए सबसे तेज़ विकल्पों में से एक है, लेकिन यह अभी भी शामिल है COM और इसलिए एक XLL ऐड-इन का उपयोग करते हुए C + + कॉल सबसे तेज़ होंगे। लेकिन एक्सेल ऑब्जेक्ट मॉडल को कॉल के मामले में वीबीए अभी भी काफी तेज है। वास्तविक गणना की गति के लिए, हालांकि, वीबीए को पिोड के रूप में चलाया जाता है, पूरी तरह से संकलित कोड के रूप में नहीं, और इसलिए देशी कोड से धीमी 2-3x के बारे में निष्पादित करता है। यह बहुत बुरा लगता है, लेकिन ऐसा नहीं है क्योंकि एक एक्सेल ऐड-इन या एप्लिकेशन के साथ लिया गया निष्पादन समय का विशाल बहुमत Excel ऑब्जेक्ट मॉडल को कॉल करता है, इसलिए VBA बनाम एक पूरी तरह से संकलित COM ऐड-इन, का उपयोग करके देखें निवासी संकलित VB 6.0, केवल 5-15% धीमी होगी, जो ध्यान देने योग्य नहीं है।

वीबी 6.0 एक संकलित कॉम दृष्टिकोण है, और गैर-एक्सेल से संबंधित कॉल के लिए VBA से 2-3x तेज चलता है, लेकिन वीबी 6.0 इस बिंदु पर लगभग 12 वर्ष का है और 64 बिट मोड में नहीं चलता है, कहते हैं कि कार्यालय 2010 स्थापित करने पर, जो 32 बिट या 64 बिट चलाने के लिए स्थापित किया जा सकता है 64 बिट का उपयोग एक्सेल इस समय छोटा है, लेकिन उपयोग में बढ़ेगा, और इसलिए मैं इस कारण से वीबी 6.0 से बचूंगा।

सी #, यदि एक एक्सेल ऐड-इन के रूप में इन-प्रोसेस चल रहा है तो Excel ऑब्जेक्ट मॉडल को वीबीए के रूप में तेज़ी से कॉल करना होता है, और गैर-एक्सेल कॉल को वीबीए की तुलना में 2-3x तेज करना होता है – यदि चल रहा है माइक्रोसॉफ्ट द्वारा अनुशंसित दृष्टिकोण, हालांकि, पूरी तरह से शर्मना चलाने के लिए है, उदाहरण के लिए, COM शिम विज़ार्ड का उपयोग करके शर्मिंदा होने से, एक्सेल को आपके कोड से संरक्षित किया जाता है (यदि यह दोषपूर्ण है) और आपका कोड अन्य तृतीय पक्ष ऐड-इन्स से पूरी तरह से संरक्षित है जो अन्यथा संभवतः समस्याएं पैदा कर सकता है। इसके नीचे की ओर, हालांकि, यह एक अलग एप डॉटमैन के भीतर एक गड़बड़ी का समाधान चलाता है, जिसे क्रॉस-ऐपडमेन मार्शिंग की आवश्यकता होती है, जो कि लगभग 40x के निष्पादन की गति जुर्माना करता है – जो कई संदर्भों में बहुत ही ध्यान देने योग्य है।

Office (VSTO) के लिए Visual Studio Tools का उपयोग ऐड-इन्स स्वचालित रूप से एक शिम के भीतर भरी हुई है और एक अलग ऐपडोमेन में कार्यान्वित करता है। वीएसटीओ का उपयोग करने से बचने में कोई बात नहीं है। इसलिए, Excel ऑब्जेक्ट मॉडल को कॉल करने से लगभग 40x एक्ज़ीक्यूशन स्पीड डिग्रेडेशन भी होगा। VSTO बहुत समृद्ध एक्सेल ऐड-इन्स बनाने के लिए एक भव्य प्रणाली है, लेकिन निष्पादन की गति आपके जैसे अनुप्रयोगों की कमजोरी है।

ExcelDna एक स्वतंत्र, खुला स्रोत प्रोजेक्ट है जो आपको सी # कोड का उपयोग करने की अनुमति देता है, जिसे आपके लिए सीएलएल ऐड-इन में परिवर्तित किया जाता है जो C ++ कोड का उपयोग करता है। यही है, ExcelDNA आपके सी # कोड को पार्स करता है और आपके लिए आवश्यक C ++ कोड बनाता है मैंने इसे स्वयं का उपयोग नहीं किया है, लेकिन मैं इस प्रक्रिया से परिचित हूं और यह बहुत प्रभावशाली है ExcelDNA को उन लोगों से बहुत अच्छी समीक्षा मिलती है जो इसका उपयोग करते हैं [संपादित करें: गौवर्ट की टिप्पणी के अनुसार निम्नलिखित सुधार पर ध्यान दें: "हाय माइक – मैं एक्सेल-डीएनए कार्यान्वयन को स्पष्ट करने के लिए एक छोटा सुधार जोड़ना चाहता हूं: सभी प्रबंधित-टू-एक्सेल गोंद प्रतिबिंब का उपयोग करके आपकी प्रबंधित असेंबली से रनटाइम पर काम करता है – वहां एक्सेल-डीएनए। नेट का उपयोग करता है, भले ही एक्सेल-डीएनए का उपयोग करता है, एक्सेल से बात करते समय कोई भी सीओएस इंटरप शामिल नहीं होता है – एक .xll के रूप में मूल इंटरफ़ेस सीधे नेट से इस्तेमाल किया जा सकता है। (हालांकि यदि आप चाहें तो आप कॉम का उपयोग भी कर सकते हैं)। यह उच्च प्रदर्शन वाली यूडीएफ और मैक्रोज़ संभव बनाता है। " – गोवर]

आप एड-इन एक्सप्रेस को भी देखना चाहेंगे। यह मुफ़्त नहीं है, लेकिन यह आपको सी # में कोड करने की अनुमति देगा और यद्यपि यह आपके समाधान को एक अलग ऐप डॉटमेन में भेज देगा, मुझे विश्वास है कि यह निष्पादन की गति बकाया है अगर मैं अपनी निष्पादन की गति को सही ढंग से समझ रहा हूं, तो मुझे यकीन नहीं है कि ऐड-इन एक्सप्रेस ऐसा क्यों कर रहा है, लेकिन यह फास्टपैथ ऐपडमामेन मार्शिंग नामक कुछ का लाभ ले सकता है। मुझे इनमें से कोई भी बोली न दें, हालांकि, जैसा कि मैं ऐड-इन एक्सप्रेस से बहुत परिचित नहीं हूँ आपको इसकी जांच करनी चाहिए और अपनी खुद की शोध करना चाहिए। [संपादित करें: चार्ल्स विलियम्स का जवाब पढ़ना, ऐसा लगता है कि ऐड-इन एक्सप्रेस दोनों कॉम और सी एपीआई एक्सेस को सक्षम करता है। और Govert बताता है कि एक्सेल डीएनए भी दोनों कॉम और फायरर सी एपीआई प्रवेश सक्षम बनाता है। तो आप शायद दोनों को जांचना चाहते हैं और उनकी तुलना एक्सेलडाने के लिए करना चाहते हैं।]

मेरी सलाह ऐड-इन एक्सप्रेस और एक्सेल डीएनए के लिए होगी। दोनों तरीकों से आप सी # का उपयोग कर कोड की अनुमति दे सकते हैं, जो आपको सबसे ज्यादा परिचित हैं।

दूसरा मुख्य मुद्दा यह है कि आप अपने कॉल कैसे करते हैं उदाहरण के लिए, एक्सेल बहुत तेजी से डेटा को संभालने के बाद एक सरणी के रूप में पीछे-आगे निकलता है। यह व्यक्तिगत रूप से कोशिकाओं के माध्यम से पाशन की तुलना में काफी अधिक कुशल है। उदाहरण के लिए, निम्न कोड एक 10 x 10 श्रेणी की कोशिकाओं को एक शॉट में 10 x 10 सरणी के असाइन करने के लिए Excel.Range.set_Value accessor विधि का उपयोग करता है:

void AssignArrayToRange() { // Create the array. object[,] myArray = new object[10, 10]; // Initialize the array. for (int i = 0; i < myArray.GetLength(0); i++) { for (int j = 0; j < myArray.GetLength(1); j++) { myArray[i, j] = i + j; } } // Create a Range of the correct size: int rows = myArray.GetLength(0); int columns = myArray.GetLength(1); Excel.Range range = myWorksheet.get_Range("A1", Type.Missing); range = range.get_Resize(rows, columns); // Assign the Array to the Range in one shot: range.set_Value(Type.Missing, myArray); } 

कोई भी इसी तरह से Excel.Range.get_Value accessor विधि का उपयोग कर सकता है, जो कि एक चरण में किसी श्रेणी से मूल्यों की एक सरणी को पढ़ता है। ऐसा करने के बाद और फिर सरणी के भीतर मूल्यों के माध्यम से पाशन करना, सीमा के कोशिकाओं के भीतर मूल्यों को व्यक्तिगत रूप से looping गर्त से बहुत तेज है।

मैं इसे एक चुनौती के रूप में लेता हूं, और एक्सेल और सी # के बीच अपने डेटा को फेरबदल करने का सबसे तेज़ तरीका शर्त लगाऊंगा- एक्सेल-डीएनए – http://exceldna.codeplex.com का उपयोग करना । (अस्वीकरण: मैं एक्सेल-डीएनए विकसित करता हूं। लेकिन यह अभी भी सच है …)

क्योंकि यह देशी .xl इंटरफ़ेस का उपयोग करता है क्योंकि यह सभी COM एकीकरण ओवरहेड को छोड़ देता है जो आपके पास VSTO या किसी अन्य COM- आधारित ऐड-इन दृष्टिकोण के साथ होता था। एक्सेल-डीएनए के साथ आप एक मैक्रो बना सकते हैं जो एक मेनू या रिबन बटन तक गिलास रखता है, जो एक रेंज पढ़ता है, इसे प्रोसेस करता है, और इसे Excel में एक श्रेणी में वापस लिखता है। सभी सी # से मूल एक्सेल अंतरफलक का उपयोग कर – दृष्टि में एक COM ऑब्जेक्ट नहीं है

मैंने एक छोटे से परीक्षण फ़ंक्शन बना लिया है जो वर्तमान चयन को एक सरणी में लेता है, प्रत्येक संख्या को सरणी में चौराहों, और परिणाम को शीट 2 में सेल A1 से शुरू करते हैं। आपको बस (फ्री) एक्सेल-डीएनए रनटाइम जोड़ना है, जिसे आप http://exceldna.codeplex.com से डाउनलोड कर सकते हैं।

मैं सी # प्रक्रिया में पढ़ता हूं और एक सेकंड के तहत एक्सेल को दस लाख सेल श्रेणी में लिखता हूं क्या यह आपके लिए काफी तेज़ है?

मेरा कार्य इस तरह दिखता है:

 using ExcelDna.Integration; public static class RangeTools { [ExcelCommand(MenuName="Range Tools", MenuText="Square Selection")] public static void SquareRange() { object[,] result; // Get a reference to the current selection ExcelReference selection = (ExcelReference)XlCall.Excel(XlCall.xlfSelection); // Get the value of the selection object selectionContent = selection.GetValue(); if (selectionContent is object[,]) { object[,] values = (object[,])selectionContent; int rows = values.GetLength(0); int cols = values.GetLength(1); result = new object[rows,cols]; // Process the values for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (values[i,j] is double) { double val = (double)values[i,j]; result[i,j] = val * val; } else { result[i,j] = values[i,j]; } } } } else if (selectionContent is double) { double value = (double)selectionContent; result = new object[,] {{value * value}}; } else { result = new object[,] {{"Selection was not a range or a number, but " + selectionContent.ToString()}}; } // Now create the target reference that will refer to Sheet 2, getting a reference that contains the SheetId first ExcelReference sheet2 = (ExcelReference)XlCall.Excel(XlCall.xlSheetId, "Sheet2"); // Throws exception if no Sheet2 exists // ... then creating the reference with the right size as new ExcelReference(RowFirst, RowLast, ColFirst, ColLast, SheetId) int resultRows = result.GetLength(0); int resultCols = result.GetLength(1); ExcelReference target = new ExcelReference(0, resultRows-1, 0, resultCols-1, sheet2.SheetId); // Finally setting the result into the target range. target.SetValue(result); } } 

इसके अतिरिक्त एरे के उपयोग पर माइक रोजेनब्लम की टिप्पणियों के लिए, मैं यह जोड़ना चाहूंगा कि मैं बहुत दृष्टिकोण (VSTO + arrays) का उपयोग कर रहा हूं और जब मैंने इसे मापा, तो वास्तविक पढ़ने की गति ही मिलीसेकंड में थी बस पढ़ने / लिखने से पहले ईवेंट हैंडलिंग और स्क्रीन को अपडेट करने को अक्षम करना याद रखें और ऑपरेशन पूर्ण होने के बाद पुन: सक्षम करना याद रखें।

सी # का उपयोग करके, आप 1-आधारित सरणियों को उसी तरह बना सकते हैं जैसे एक्सेल VBA ही करता है। यह बहुत उपयोगी है, विशेष रूप से क्योंकि VSTO में भी, जब आप एक्सेल से सरणी निकालते हैं। रेंज ऑब्जेक्ट, सरणी 1-आधारित है, इसलिए एक्सेल उन्मुख सरणियों को 1-आधारित रखने से आपको हमेशा यह जांचने में मदद मिलती है कि क्या सरणी एक-आधारित या शून्य-आधारित है (यदि सरणी में कॉलम की स्थिति आपके लिए महत्वपूर्ण है, 0-आधारित और 1-आधारित एरे से निपटने के लिए एक वास्तविक दर्द हो सकता है)।

आम तौर पर Excel पढ़ना। सरणी में बदलें कुछ ऐसा दिखाई देगा:

 var myArray = (object[,])range.Value2; 

माइक रोजेनब्लम के सरणी लिखने में मेरी भिन्नता इस तरह एक 1-आधारित सरणी का उपयोग करती है:

 int[] lowerBounds = new int[]{ 1, 1 }; int[] lengths = new int[] { rowCount, columnCount }; var myArray = (object[,])Array.CreateInstance(typeof(object), lengths, lowerBounds); var dataRange = GetRangeFromMySources(); // this example is a bit too atomic; you probably want to disable // screen updates and events a bit higher up in the call stack... dataRange.Application.ScreenUpdating = false; dataRange.Application.EnableEvents = false; dataRange = dataRange.get_Resize(rowCount, columnCount); dataRange.set_Value(Excel.XlRangeValueDataType.xlRangeValueDefault, myArray); dataRange.Application.ScreenUpdating = true; dataRange.Application.EnableEvents = true; 

एक्सेल डेटा के लिए सबसे तेज़ इंटरफ़ेस सी एपीआई है। वहाँ से बाहर कई उत्पादों रहे हैं कि इस अंतरफलक का उपयोग कर एक्सेल को जोड़ने के लिए .NET।

2 उत्पादों मुझे ऐसा करना पसंद है, एक्सेल डीएनए (जो मुफ़्त और ओपन सोर्स है) और एडिन एक्सप्रेस (जो एक व्यावसायिक उत्पाद है और सी एपीआई और कॉम इंटरफ़ेस दोनों उपलब्ध है)।

सबसे पहले, आपका समाधान एक एक्सेल यूडीएफ (उपयोगकर्ता परिभाषित फ़ंक्शन) नहीं हो सकता। हमारे मैनुअल में, हम निम्नलिखित परिभाषा देते हैं: "एक्सेल यूडीएफ का इस्तेमाल अंतिम प्रयोक्ता के लिए Excel में कस्टम फंक्स बनाने के लिए किया जाता है।" यदि आप बेहतर परिभाषा का सुझाव देते हैं तो मुझे कोई दिक्कत नहीं होगी 🙂

यह परिभाषा बताती है कि एक यूडीएफ यूआई में एक बटन नहीं जोड़ सकता (मुझे पता है कि एक्सएलएल कमांडबार यूआई को संशोधित कर सकते हैं) या इंटरसेप्ट कुंजीपटल शॉर्टकट्स और साथ ही एक्सेल ईवेंट्स।

यही है, एक्सेलडीएनए गुंजाइश से बाहर है क्योंकि यह एक्सएलएल ऐड-इन्स के विकास के लिए तैयार है एक्सेल-एक्स्ड-एक्स्ड-ऐंड एक्सप्रेस की समान कार्यक्षमता पर लागू होता है, क्योंकि इससे एक्सएलएल ऐड-इन्स और एक्सेल ऑटोमेशन ऐड-इन्स को विकसित करने की अनुमति मिलती है।

क्योंकि आपको एक्सेल की घटनाओं को संभालने की आवश्यकता है, आपका समाधान एक स्टैंडअलोन एप्लीकेशन हो सकता है लेकिन इस तरह के दृष्टिकोण की स्पष्ट सीमाएं हैं कॉम ऐड-इन बनाने का एकमात्र वास्तविक तरीका है; यह Excel ईवेंट को प्रबंधित करने और कस्टम चीज़ों को Excel UI पर जोड़ने की अनुमति देता है। आपके पास तीन संभावनाएं हैं:

  • VSTO
  • ऐड-इन एक्सप्रेस (COM ऐड-इन कार्यक्षमता)
  • साझा एड-इन (वीएस में नए प्रोजेक्ट संवाद में संबंधित आइटम देखें)

यदि किसी Excel COM ऐड-इन को विकसित करने के बारे में बात कर रहे हैं, तो ऊपर दिए गए 3 उपकरण अलग-अलग विशेषताएं उपलब्ध कराते हैं: विज़ुअल डिज़ाइनर, शिमिंग आदि। लेकिन मुझे नहीं लगता कि वे Excel ऑब्जेक्ट मॉडल तक पहुंचने की गति में भिन्न हैं। कहते हैं, मैं नहीं जानता (और कल्पना नहीं कर सकते हैं) क्यों डिफ़ॉल्ट अनुप्रयोग से COM ऑब्जेक्ट प्राप्त करना चाहिए अन्य AppDomain से समान COM ऑब्जेक्ट प्राप्त करने से भिन्न होना चाहिए बीटीडब्लू, आप जांच सकते हैं कि क्या शर्मनाक आपरेशन की गति को एक साझा ऐड-इन बनाकर और फिर इसे शिम करने के लिए COM शिम विज़ार्ड का उपयोग करके प्रभावित करता है।

गति द्वितीय जैसा कि मैंने कल आपको लिखा था: "कक्षाओं की एक श्रेणी को पढ़ने और लिखने में तेजी लाने का सबसे अच्छा तरीका है Excel का एक चर बनाना। रेंज प्रकार उस श्रेणी का संदर्भ दे रहा है और फिर मूल्य गुण से / चर का। " लेकिन फ़्रांसिस्को ने जो कहा है, उसके विपरीत, मैं इसे वीएसटीओ के लिए नहीं मानता हूं; यह एक्सेल वस्तु मॉडल की एक विशेषता है।

स्पीड III सबसे तेज एक्सेल यूडीएफ मूल सी ++ में लिखे गए हैं, किसी भी एनएटीटी भाषा में नहीं। एक्सेलडएनए और ऐड-इन एक्सप्रेस द्वारा निर्मित एक एक्सएलएल एड-इन की गति की तुलना नहीं की है; मुझे नहीं लगता कि आपको यहां कोई भी महत्वपूर्ण अंतर मिलेगा।

सारांश में। मुझे विश्वास है कि आप गलत तरीके से हैं: ऐड-इन एक्सप्रेस, वीएसटीओ या साझा एड-इन पर आधारित कॉम एड-इन को एक्सेल कोशिकाओं को उसी गति से पढ़ना और लिखना चाहिए। अगर कोई इस कथन को अस्वीकार करता है तो मुझे खुशी होगी (ईमानदारी से)।

अब आपके अन्य प्रश्नों पर वीएसटीओ एक COM ऐड-इन का समर्थन करने वाले कार्यालय 2000-2010 को विकसित करने की अनुमति नहीं देता है। इसे कार्यालय 2003-2010 को पूरी तरह से समर्थन करने के लिए तीन अलग-अलग कोडबेस और विजुअल स्टूडियो के कम से कम दो संस्करणों की आवश्यकता है; Excel 2003 के लिए VSTO- आधारित ऐड-इन को परिनियोजित करने के लिए आपके पास मजबूत तंत्रिकाओं और भाग्य के एक हिस्से की आवश्यकता है। ऐड-इन एक्सप्रेस के साथ, आप एक कोड ऐप के साथ सभी Office संस्करणों के लिए एक COM ऐड-इन बनाते हैं; ऐड-इन एक्सप्रेस आपको एक सेटअप प्रोजेक्ट प्रदान करता है, जो आपके ऐड-इन को Excel 2000-2010 (32-बिट और 64-बिट) में स्थापित करने के लिए तैयार है; क्लिकऑन तैनाती बोर्ड पर भी है

VSTO एक क्षेत्र में ऐड-इन एक्सप्रेस को धराशायी करता है: यह तथाकथित दस्तावेज़-स्तर ऐड-इन्स बनाने की अनुमति देता है इसके पीछे कुछ .NET कोड के साथ एक कार्यपुस्तिका या टेम्पलेट की कल्पना करें; मुझे आश्चर्य नहीं होगा, हालांकि, अगर ऐसी चीजों को तैनाती एक दुःस्वप्न है

एक्सेल की घटनाओं पर सभी एक्सेल इवेंट MSDN में सूचीबद्ध हैं, उदाहरण के लिए, Excel 2007 ईवेंट देखें

बेलारूस से संबंधित (जीएमटी +2),

आंद्रेई स्मोलिन ऐड-इन एक्सप्रेस टीम लीडर

मैंने डेटा इकट्ठा और कॉम्पैक्ट करने के लिए VBA कोड (मैक्रो) का उपयोग किया है, और यह डेटा एक कॉल में सी # पर प्राप्त किया है, और इसके ठीक विपरीत। यह शायद सबसे अधिक प्रदर्शनकारी दृष्टिकोण होगा।

सी # का उपयोग करते हुए, आपको हमेशा कुछ मार्शलिंग का उपयोग करने की आवश्यकता होगी VSTO या COM Interop का उपयोग करते हुए, अंडरलाइन संचार परत (मार्शलिंग ओवरहेड) समान है

VBA में (अनुप्रयोग के लिए विजुअल बेसिक) आप Excel में ऑब्जेक्ट पर सीधे काम करते हैं। इसलिए इस डेटा तक पहुंच हमेशा तेज़ हो जाएगा

लेकिन …. एक बार जब आप सी # में डेटा प्राप्त करते हैं, तो इस डेटा का हेरफेर बहुत तेजी से हो सकता है।

यदि आप VB6 या C ++ का उपयोग कर रहे हैं, तो आप एक COM इंटरफ़ेस के माध्यम से भी जाते हैं, और आप भी क्रॉस प्रोसेस मार्शलिंग का सामना करेंगे।

तो आप क्रॉस प्रोसेस कॉल और मार्शलिंग को कम करने के लिए एक विधि की तलाश कर रहे हैं।