2010-11-30 12 views
10

प्रोग्रामिंग के 10 वर्षों के बाद मुझे खुद को एक्सेल 2007 में अपना पहला एक्सेल एप्लिकेशन बनाने का चुनौतीपूर्ण कार्य मिल गया। मैंने एमएस एक्सेस पर पहले वीबीए में प्रोग्राम किया है, इसलिए यह वास्तव में मेरे लिए तकनीकी चुनौती नहीं है लेकिन यह "प्रतिमान" का वास्तविक परिवर्तन है, मुझे हिम्मत है।एक्सेल एप्लिकेशन का आर्किटेक्चर

अब मुझे एक एक्सेल ऐप लागू करना है जो SQLServer (मेरे द्वारा बनाए गए समर्पित डेटाबेस पर), सामान्य सीआरयूडी सामान पर बात करता है लेकिन जो भी मैं किसी भी पुस्तक (एक्सेल बाइबिल, एक्सेल पावर प्रोग्रामिंग इत्यादि ...) पर नहीं पढ़ सकता मैं ऐप को कैसे विकसित करना चाहता हूं।

  • मैं अपने कॉलम के नाम दे और जब डेटा SQLServer

  • को वापस भेजने एक डेटाबेस स्तंभ के रूप में उपयोग जब मैं डेटा क्या है कि मैं उदाहरण के लिए पुनः प्राप्त एक स्प्रेडशीट अनुप्रयोग की उम्मीद है वापस पुनः प्राप्त कर सकते हैं आईडी, विवरण (कॉलम में आईडी छुपाएं और विवरण दिखाएं) या क्या मुझे बस सबकुछ के लिए विवरण का उपयोग करना चाहिए और मेरे SQLServer तालिकाओं में denormalized डेटा स्टोर करना चाहिए, जिससे उन्हें सर्वर की ओर एक्सेल शीट के बराबर बना दिया जा सकता है?

  • यदि मैं लुकअपटेबल (आईडी, देश) के लिए सामान्यीकृत डेटा का उपयोग करना चाहता हूं, तो क्या मुझे आईडी, देश की जानकारी को एक श्रेणी में स्टोर करना चाहिए और यदि ऐसा है, तो मैं उपयोगकर्ता को उस श्रेणी (आईडी) से मूल्य कैसे चुनूं , देश) उचित Combobox का उपयोग किए बिना?

  • जब मैं SQLServer से डेटा पुनर्प्राप्त करता हूं, तो क्या मुझे इसे ADODB.Recordset (उदाहरण के लिए दृश्य या संग्रहीत प्रक्रिया को कॉल करके) में मॉडल करना चाहिए और इसे शीट में कॉपी करना सुनिश्चित करना है कि रिकॉर्ड्स में फ़ील्ड का क्रम है शीट में जैसा ही है या क्या कोई बेहतर तरीका है?

मैं वहाँ बहुत से लोगों को लगता है कि मेरी स्थिति वहाँ समझते हैं, क्योंकि वे मेरे जूते में किया गया था है यकीन है, कृपया मुझे कूद मुझे स्प्रैडशीट ऐप दुनिया को समझने में मदद मिलेगी बनाने में मदद। वेब संसाधनों के पॉइंटर्स भी बहुत स्वागत है।

धन्यवाद।

+0

उपयोगकर्ता को एक्सेल के माध्यम से आप किस प्रकार के बदलाव की उम्मीद कर रहे हैं? क्या हम मुख्य रूप से व्यक्तिगत पंक्तियों को बनाने/संपादित करने/हटाने के बारे में बात कर रहे हैं या संभावित संभावनाओं की बड़ी संख्या में बैच अपडेट हैं? – barrowc

+0

यह – Lorenzo

+0

एक समय में कुछ पंक्तियों (10 से कम) को अपडेट/बनाने के बारे में होगा शीर्ष दो पुस्तकें पढ़ने योग्य हैं और आपको बहुत मदद मिलेगी (7 साल बाद)। मेरे पास दूसरा दूसरा है और इससे काफी मदद मिली ... [अमेज़ॅन] (https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords= व्यावसायिक +Excel+ डेवलपमेंट)। Pluralsight.com में एक्सेल वीबीए (बहुत उन्नत) के लिए कक्षाएं भी हैं जो आपके प्रश्नों का उत्तर देती हैं। आपका अंतिम प्रश्न फ़ील्ड ऑर्डर के बारे में चिंता किए बिना प्रकारों के साथ किया जा सकता है। – Brian

उत्तर

7

मैंने आपके द्वारा वर्णित एक जैसा कुछ एप्लीकेशन लिखा है और जब मैं सर्वोत्तम अभ्यास प्रदान करने का नाटक नहीं कर सकता हूं तो मैं अपने व्यक्तिगत अनुभवों के आधार पर टिप्पणी कर सकता हूं।

• मैं अपने कॉलम के नाम दे और जब डेटा SQLServer को वापस भेजने एक डेटाबेस स्तंभ के रूप में उपयोग

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

• यदि मैं लुकअपटेबल (आईडी, देश) के लिए सामान्यीकृत डेटा का उपयोग करना चाहता हूं, तो क्या मुझे आईडी, देश की जानकारी को एक श्रेणी में स्टोर करना चाहिए और यदि ऐसा है, तो मैं उपयोगकर्ता को उस श्रेणी से मूल्य चुनने के लिए कैसे मजबूर करूं (आईडी, देश) उचित कम्बोबॉक्स का उपयोग किए बिना?

आप प्रत्येक लुकअप तालिका के लिए व्यक्तिगत (छुपा) शीट बना सकते हैं और इस तरह से कोड (एक मैक्रो रिकॉर्डिंग तो यह साफ किया जा सकता है के आधार पर) का उपयोग कर


    With Sheet1.Range("E3").Validation 
     .Delete 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:="=B2:B5" 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "A sample" 
     .ErrorTitle = "An error" 
     .InputMessage = "Input message" 
     .ErrorMessage = "Error message" 
     .ShowInput = True 
     .ShowError = True 
    End With 

इस दे देंगे चयन लागू कर सकते हैं आप सेल में एक कॉम्बो बॉक्स, असफल सत्यापन और सेल के लिए एक शीर्षक पर एक त्रुटि संदेश।

• जब मैं डेटा को वापस प्राप्त करता हूं तो स्प्रेडशीट ऐप से क्या अपेक्षा की जाती है, उदाहरण के लिए मैं आईडी, विवरण (कॉलम में आईडी छुपाएं और विवरण दिखा रहा हूं) या मुझे बस सब कुछ के लिए विवरण का उपयोग करना चाहिए और denormalized स्टोर करना चाहिए मेरे SQLServer तालिकाओं में डेटा, उन्हें सर्वर पक्ष एक्सेल शीट के समतुल्य बनाते हैं?

यह किसी भी तरह से काम करेगा। मैं शायद डेटा की जटिलता के आधार पर फैसला करता हूं। यदि आपको वीबीए में बहुत से सत्यापन कोड बनाने की आवश्यकता है तो मैं SQL सर्वर में टेबल को स्टेजिंग टेबल में डिमॉर्मलाइज्ड डेटा खींचने के लिए प्रेरित हूं और फिर डेटा को अपनी मुख्य तालिका में स्थानांतरित करने से पहले संग्रहीत प्रोसेस का उपयोग करके denormalise। YMMV।

• जब मैं SQLServer से डेटा पुनर्प्राप्त करता हूं, तो क्या मुझे इसे ADODB.Recordset (उदाहरण के लिए दृश्य या संग्रहीत प्रक्रिया को कॉल करके) में मॉडल करना चाहिए और इसे शीट में कॉपी करना सुनिश्चित करना है कि रिकॉर्ड्स में फ़ील्ड का क्रम है शीट में जैसा ही है या क्या कोई बेहतर तरीका है?

मैं कॉपी और पेस्ट का उपयोग करने से बचूंगा क्योंकि यह सिस्टम विस्तृत क्लिपबोर्ड का उपयोग करता है और यदि आप सैमटाइम पर पीसी का उपयोग कर रहे हैं तो विषम चीजें हो सकती हैं। एक्सेल में रेंज ऑब्जेक्ट में एक CopyFromRecordset विधि है जिसका उपयोग आप एडीओ से डेटा वर्कशीट में धक्का देने के लिए कर सकते हैं। मैन्युअल रूप से असाइन करने वाले रिकॉर्डसेट के माध्यम से पुनरावृत्ति करने से यह बहुत तेज़ है। केवल नकारात्मक पक्ष यह है कि आपको पहले ही हेडर कॉलम बनाना होगा।

+0

धन्यवाद होमर, महान उत्तर, जो मैं आखिरी बिंदु में कहने की कोशिश कर रहा हूं वह यह है कि जब मैं डेटाबेस से अपनी denormalized तालिका को पुनर्प्राप्त करता हूं तो मुझे इसे "पेस्ट" करना चाहिए उदाहरण के लिए रेंज (ए 1) एक्सेल शीट और एसकल्स्सेवर को मानते हुए एक ही संरचना। – Lorenzo

+1

आह ठीक है मैं देखता हूँ। मैं कॉपी और पेस्ट का उपयोग करने से बचूंगा क्योंकि यह सिस्टम वाइड क्लिपबोर्ड का उपयोग करता है और यदि आप सैमटाइम पर पीसी का उपयोग कर रहे हैं तो विषम चीजें हो सकती हैं। एक्सेल में रेंज ऑब्जेक्ट में एक CopyFromRecordset विधि है जिसका उपयोग आप एडीओ से डेटा वर्कशीट में धक्का देने के लिए कर सकते हैं। यह भी बहुत तेज है। केवल नकारात्मक पक्ष यह है कि आपको पहले ही हेडर कॉलम बनाना होगा। –

+0

यहां से: http://support.microsoft.com/kb/257819 कॉलम शीर्षलेख: डिफ़ॉल्ट रूप से, यह माना जाता है कि आपके एक्सेल डेटा स्रोत की पहली पंक्ति में स्तंभ शीर्षलेख शामिल हैं जिन्हें फ़ील्ड नामों के रूप में उपयोग किया जा सकता है। यदि यह मामला नहीं है, तो आपको इस सेटिंग को बंद करना होगा, या डेटा नाम के रूप में उपयोग करने के लिए डेटा की आपकी पहली पंक्ति "गायब हो जाएगी"। यह कनेक्शन स्ट्रिंग के विस्तारित गुणों में वैकल्पिक एचडीआर = सेटिंग जोड़कर किया जाता है। डिफ़ॉल्ट, जिसे निर्दिष्ट करने की आवश्यकता नहीं है, एचडीआर = हां है। – Lorenzo

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