COM

2012-12-24 13 views
5

के माध्यम से इंटरैक्ट करते समय एक्सेल को "लॉक" कैसे करें मेरे पास एक .NET एप्लिकेशन है जो डेटाबेस पढ़ता है, कुछ विश्लेषण करता है, और एक्सेल COM इंटरफ़ेस का उपयोग करके स्प्रेडशीट अपडेट करता है। मेरे पास उस बिंदु पर एप्लिकेशन है जहां यह कार्यपुस्तिका खोलता है (या यह पता लगाता है, अगर यह पहले से खुला है), और उस शीट को पाता है जिसे इसे अपडेट करने की आवश्यकता है।COM

मुझे एक समस्या का सामना करना पड़ रहा है जहां उपयोगकर्ता अभी भी एक्सेल (एप्लिकेशन/कार्यपुस्तिका बंद करें, डेटा बदलें, आदि) के साथ इंटरैक्ट कर सकता है, जबकि मेरा एप्लिकेशन चल रहा है। मैंने ऐप को छिपाने पर विचार किया है जबकि मेरा ऐप डेटा पर चबाने वाला है, लेकिन यह एप्लिकेशन-व्यापी है और उपयोगकर्ता को किसी भी ओपन स्प्रेडशीट के साथ बातचीत करने से रोकता है।

क्या एक्सेल को COM इंटरफ़ेस के माध्यम से परिवर्तन से लॉक करने का कोई तरीका है, लेकिन फिर भी यह उपयोगकर्ता द्वारा देखने योग्य/पठनीय है? वैकल्पिक रूप से, क्या एक कार्यपुस्तिका को छिपाने/लॉक करने का कोई तरीका है?

+0

आपको फ़ाइल को एक अस्थायी स्थान पर स्थानांतरित करने के लिए File.Move का उपयोग करना चाहिए, अपने परिवर्तन करें और फिर इसे – JMK

+0

@JMK पर कॉपी करें, मैं ओपी की समस्या नहीं है, उपयोगकर्ता को फ़ाइल खोलने के साथ ही, अधिक करने के लिए उपयोगकर्ता एक्सेल के उदाहरण के साथ बातचीत कर रहा है जिसमें फ़ाइल खुलती है। –

उत्तर

0

क्या Worksheets("Sheet1").protect(<password>) और unprotect(<password>) चाल है?

+0

नहीं, मैंने कोशिश की। – gregsdennis

+0

((एक्सेल। वर्कशीट) excelApp.ActiveWorkbook.Sheets [1])। सक्षम चयन = Excel.XlEnableSelection.xlUnlockedCells; ((एक्सेल। वर्कशीट) excelApp.ActiveWorkbook.Sheets [1])। (पासवर्ड: सुरक्षा पासवर्ड, अनुमति देंफॉर्मिंग कैल्स: झूठी); – MethodMan

+0

एक चादर की रक्षा करने में मदद नहीं करेगा! –

0

... ऐसा करने का एकमात्र असली बुद्धिमान तरीका है जिसे मैं सोच सकता हूं कि एक्सेल एप्लिकेशन का एक नया उदाहरण बनाना है, उसमें कोई छुपा हुआ है और वहां आपके बदलाव हैं।

फिर, यदि कार्यपुस्तिका पहले से ही खुली है, तो बस उपयोगकर्ता को सूचित करें और उन्हें बंद करने के लिए कहें।

+0

मैं कर सकता है कि । मुझे अपने ऐप को पूर्ण होने के बाद इंस्टेंस को अनदेखा करना होगा क्योंकि उपयोगकर्ता को मैन्युअल रूप से शीट के भीतर कुछ और संचालन करने की आवश्यकता है ... – gregsdennis

+0

मुझे पता चला है कि एक्सप्लोरर से एक्सेल वर्कबुक खोलने से विंडोज़ को अधिकतम करने और दृश्यमान करने का कारण बन जाएगा एक्सेल का उदाहरण जो छुपा हुआ है (माना जाता है कि यह वर्तमान में उपलब्ध एकमात्र उदाहरण है)। –

+0

@gregsdennis, यह करना बहुत आसान है - बस एक्सेल ऐप ऑब्जेक्ट बनाएं, परिवर्तनों के अंत में अपनी 'दृश्यमान' संपत्ति को गलत पर सेट करें, इसे 'दृश्यमान' प्रॉपर्टी को सही पर सेट करें और इसे बंद किए बिना ऑब्जेक्ट को रिलीज़ करें उस बिंदु पर, यह उपयोगकर्ता के उपयोग के लिए बस एक और खुला ऐप बन जाता है ... मैं अक्सर ऐसा करता हूं। –

0

यह करने का सबसे अच्छा तरीका मैं इसे खोलने के बारे में सोच सकता हूं और उन्हें तुरंत पूरी कार्यपुस्तिका को छिपाना है। इस तरह आप अभी भी इंटरऑप के माध्यम से इसके साथ बातचीत कर सकते हैं, लेकिन उपयोगकर्ता के पास इसकी कोई दृश्यता नहीं है (जब तक कि वे इसे विशेष रूप से अनदेखा न करें, लेकिन मुझे लगता है कि बहुत से उपयोगकर्ता यह नहीं जानते कि यह कैसे करें)।

xlWorkbook.Windows[1].Visible = false; 
1
Application.Interactive=false; 

के रूप में सिड पता चलता है आपका सर्वश्रेष्ठ दांव है मैं भी सुझाव है कि बदलते:

Application.ScreenUpdating = false; // to avoid screen flicker 
    Application.DisplayAlerts = false; // if you wish to suppress most excel messages 
    Application.EnableEvents = false; // if there is vba in the workbook you wish to avoid triggering 

    Application.Calulation = xlCalculationManual; // if it's a calc intensive automation 

एक अच्छा विचार इकट्ठा करने के लिए अपनी स्थिति अपने स्वचालन पूर्व और इन गुणों के सभी सेट जब आप अपने स्वचालन के साथ समाप्त हो जाते हैं तो अपने मूल पर वापस जाएं।

+0

यदि यह एक वाणिज्यिक उत्पाद है या अन्य वाणिज्यिक उत्पादों के साथ प्रयोग किया जाता है, तो मैं 'EnableEvents' प्रॉपर्टी को बदलने के खिलाफ अनुशंसा करता हूं। कार्यालय उत्पाद एक साझा सैंडबॉक्स हैं - अन्य एडिन लोड हो सकते हैं जो घटनाओं पर ठीक से काम करने के लिए भरोसा करते हैं। एक ऑफिस डेवलपर के रूप में, एक ऐड-इन के लिए प्रयास करना महत्वपूर्ण है जो अन्य ऐड-इन्स के साथ संगत है, और 'enableEvents' को गलत पर सेट करना सबसे व्यापक रूप से कार्यान्वित असंगतता समस्याओं में से एक है। –