2012-06-18 25 views
32

मैं आईओएस पर प्रोग्रामेटिक रूप से एक xlsx फ़ाइल बनाने की कोशिश कर रहा हूं। चूंकि xlsx फ़ाइलों का आंतरिक डेटा मूल रूप से अलग xml फ़ाइलों में संग्रहीत किया जाता है, इसलिए मैंने अपनी सभी फाइलों और उपनिर्देशिकाओं के साथ xlsx संरचना को फिर से बनाने की कोशिश की, उन्हें ज़िप फ़ाइल में संपीड़ित करें और इसका विस्तार xlsx पर सेट करें। मैं सभी आवश्यक xml फ़ाइलों को बनाने के लिए GDataXML पार्सर/लेखक का उपयोग करता हूं। हालांकि, मुझे प्राप्त फ़ाइल xlsx फ़ाइल के रूप में नहीं खोली जा सकती है। यहां तक ​​कि यदि मैं एक वैध xlsx फ़ाइल से सभी डेटा पोंछता हूं, तो मूल एक्सएमएल फाइलों से डेटा कॉपी करके मैन्युअल रूप से सभी एक्सएमएल फाइलें बनाएं और उन्हें मैन्युअल रूप से संपीड़ित करें, मैं एक वैध xlsx फ़ाइल को पुन: बना नहीं सकता।अपने आंतरिक उप-घटकों से वैध xlsx फ़ाइल को सही ढंग से कैसे इकट्ठा करें?

प्रश्न हैं:

  • xlsx वास्तव में सिर्फ एक संग्रह एक्सएमएल फ़ाइलें युक्त है?
  • मैं एक वैध xlsx फ़ाइल प्रोग्रामेटिक रूप से कैसे बना सकता हूं यदि मैं सिर्फ ज़िप फ़ाइल में xml फ़ाइलों को संपीड़ित नहीं कर सकता और अपना एक्सटेंशन xlsx पर सेट कर सकता हूं?

उत्तर

40

जवाब में अपने प्रश्नों के:

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

एक xlsx फ़ाइल की सामग्री का उदाहरण:

unzip -l example.xlsx 
Archive: example.xlsx 
    Length  Date Time Name 
-------- ---- ---- ---- 
     769 10-15-14 09:23 xl/worksheets/sheet1.xml 
     550 10-15-14 09:22 xl/workbook.xml 
     201 10-15-14 09:22 xl/sharedStrings.xml 
     ... 

मैं नियमित रूप से XLSX फ़ाइलें अनज़िप, परीक्षण के लिए मामूली परिवर्तन बनाने के लिए और उन्हें किसी भी मुद्दे के बिना फिर से ज़िप।

अपडेट: महत्वपूर्ण बात यह है कि मूल निर्देशिका को ज़िप करने से बचें। यहाँ लिनक्स पर zip प्रणाली उपयोगिता या ओएस एक्स का उपयोग कर एक उदाहरण है:

# Unzip an xlsx file into a directory. 
unzip example.xlsx -d newdir 

# Make some valid changes to the files. 
cd newdir/ 
vi xl/worksheets/sheet1.xml 

# Rezip the files *FROM* the unzipped directory. 
# Note: you could also re-zip to the original file if required. 
find . -type f | xargs zip ../newfile.xlsx 

# Check the file looks okay. 
cd .. 
unzip -l newfile.xlsx 
xdg-open newfile.xlsx 
+1

7-ज़िप संस्करण 9.20 नौकरी नहीं कर रहा है। आप किस सॉफ्टवेयर का उपयोग करते हैं जिसमें Office के xlsx के लिए सही डिफ़ॉल्ट मान हैं? –

+5

7-ज़िप संस्करण 9.20 ने चाल की, लेकिन जैसा कि डेविड ने कहा, हम मूल फ़ोल्डर के साथ ज़िप नहीं बनायेंगे। ज़िप (जिसका नाम बदलकर xslx किया जाएगा) में सीधे _rels, docProps और xl फ़ोल्डर्स होना चाहिए। –

+2

मैंने एक उदाहरण जोड़ा है। – jmcnamara

27

अगर मैं एक फ़ोल्डर में एक xlsx फ़ाइल को संपीड़ित और फिर मैं इसे फिर से फिर से कंप्रेस, xlsx भ्रष्ट/मान्यता प्राप्त नहीं हो जाता है। मेरे मामले में, कारण यह है कि मेरा ज़िप उपकरण फ़ोल्डर के नाम को ज़िप के अंदर प्रत्येक फ़ाइल के सापेक्ष पथ के लिए पहले स्तर के रूप में उपयोग कर रहा है।

मैंने xlsx सामग्री वाले फ़ोल्डर के अंदर एक खाली ज़िप फ़ाइल बनाकर और फिर सभी फ़ाइलों और फ़ोल्डर्स को जोड़कर समस्या हल कर दी है।

असल में, यदि आप फ़ोल्डर को ज़िप करने का प्रयास करते हैं, तो फ़ाइल वैध xlsx नहीं है। आपको फ़ोल्डर के अंदर जाना चाहिए, सभी सामग्री का चयन करना चाहिए और फिर & ज़िप पर राइट-क्लिक करें।