2010-12-14 17 views
6

में एक्सएमएल डेटा स्टोर करने का सबसे अच्छा तरीका क्या है मैं एक्सेल फ़ाइल में एक्सएमएल डेटा स्टोर करने का एक तरीका ढूंढ रहा हूं। डेटा को पूरी तरह से उपयोगकर्ता के लिए छुपाया जाना चाहिए, यह किसी सेल या टिप्पणी में नहीं होना चाहिए, यहां तक ​​कि छुपा भी। साथ ही, उपयोगकर्ता को खुलने पर डेटा संरक्षित किया जाना चाहिए और फिर एक्सेल के साथ फ़ाइल सहेजता है। मैं बाह्य XML डेटा से कोशिकाओं को मैप करने का कोई तरीका नहीं ढूंढ रहा हूं। एक्सएमएल डेटा xlsx फ़ाइल के अंदर होना चाहिए।एक्सेल फ़ाइल

डेटा को सी # टूल का उपयोग करके दर्ज किया जाएगा, एक्सेल स्वयं ही नहीं।

उत्तर

2

एक्सेल डेटा संग्रह करने, छेड़छाड़ करने और देखने के लिए एक एप्लिकेशन है, और इस प्रकार, यह मनमाने ढंग से अपठनीय डेटा स्टोर करने के लिए डिज़ाइन नहीं किया गया है। हालांकि, जैसा कि आपने बताया है, आप कुछ जानकारी रखने के लिए छिपे हुए फ़ील्ड को एक अलग चादर पर उपयोग कर सकते हैं।

+0

मैं एक एम्बेडेड OLE ऑब्जेक्ट का उपयोग करना चाहिए:

//Deletes all the previously added parts and adds a new part //containing the string argument which has to be in XML format. public void addCustomXMLPart(string test) { IEnumerator e = Xlworkbook.CustomXMLParts.GetEnumerator(); e.Reset(); CustomXMLPart p; //The !p.BuiltIn is because before our customXMLPart there are some // Excel BuiltIns of them and if we try to delete them we will get an exception. while (e.MoveNext()) { p = (CustomXMLPart)e.Current; if (p != null && !p.BuiltIn) p.Delete(); } Xlworkbook.CustomXMLParts.Add(test, Type.Missing); } 

बारे xlworkbook वस्तु ऊपर इस्तेमाल किया? या एक कस्टम हिस्सा? – user542393

+0

इस XML को फ़ाइल में संग्रहीत करने का उद्देश्य क्या है? –

6

.xlsx फ़ाइल वास्तव में केवल एक संपीड़न संग्रह (ज़िप फ़ाइल) है, इसलिए यदि आप वास्तव में एक छिपी हुई फ़ाइल जोड़ना चाहते हैं तो आप संग्रह में एक .xml फ़ाइल जोड़ सकते हैं। इस तरह एक्सेल को यह भी पता नहीं था कि यह वहां था।

.xlsx फ़ाइल को .zip में बदलें, इसे निकालें, अपनी फ़ाइल जोड़ें, फिर .zip फ़ाइल की सामग्री का चयन करें और उन्हें पुनः संग्रहित करें। .xlsx का नाम बदलें और आपके अंदर अपनी छिपी हुई .xml फ़ाइल होगी। :

आप SharpZipLib की तरह एक ज़िप लाइब्रेरी का उपयोग सी # में ऐसा कर सकते हैं (नोट शीर्ष-स्तरीय फ़ोल्डर, केवल सामग्री ज़िप न करें): http://www.sharpdevelop.net/OpenSource/SharpZipLib/

अद्यतन: यह "छिपा" फाइल होगा यदि उपयोगकर्ता एक्सेल के भीतर से फ़ाइल को सहेजता है तो संरक्षित नहीं किया जाएगा। उस परिदृश्य के लिए मैं सबसे अच्छा विचार रख सकता हूं कि शीट में एम्बेडेड वीबीए मैक्रो के हिस्से के रूप में कोड को आवेदना देना है। http://msdn.microsoft.com/en-us/library/aa982683.aspx

core.xml और app.xml (docProps फ़ोल्डर में) दस्तावेज़ गुण होते हैं और अतिरिक्त स्टोर करने के लिए एक अच्छा स्थान हो सकता है:

यह कड़ी कार्यालय पैकेज के हिस्से से छेड़छाड़ के बारे में उपयोगी जानकारी शामिल है एक्सएमएल जानकारी।

+0

क्या यह उपयोगकर्ता से 'सेव करें ...' के बाद एक्सएमएल डेटा को सुरक्षित रखेगा? – reinierpost

+0

यह या तो एक सेव या सेव के रूप में जीवित नहीं रहेगा। इसे ध्यान में रखने के लिए धन्यवाद। मैंने सवाल के उस हिस्से को पूरी तरह से पर्याप्त नहीं पढ़ा था। –

+0

सही, यह Excel.SaveAs से बच नहीं पाएगा। हालांकि, शब्द कस्टम भागों के लिए अनुमति देता है। क्या एक्सेल में समकक्ष है? शायद एक विशेष रिश्ते का प्रकार? Http://msdn.microsoft.com/en-us/library/bb608618.aspx – user542393

6

मेरे पास एक ही समस्या थी और Microsoft's Custom XML Parts का उपयोग करके इसका निपटारा करने के लिए मेरा कोड यहां है। (आपको कोड में मेरी टिप्पणियों में सभी आवश्यक स्पष्टीकरण मिल सकते हैं)।

using Excel = Microsoft.Office.Interop.Excel; 

Excel.Workbook XlWorkbook = (Excel.Workbook) 
    (Excel.Application)Marshal.GetActiveObject("Excel.Application")).ActiveWorkbook; 
संबंधित मुद्दे