2011-04-30 8 views
11

के साथ ओपन एक्सएमएल स्प्रेडशीट बनाते समय एक्सेल और "अपठनीय सामग्री" ओपन एक्सएमएल एसडीके v2.0 का उपयोग करते हुए एक्सेल स्प्रेडशीट बनाते समय, हमारे एक्सेल आउटपुट ने शुरुआत में कई महीनों तक सफलतापूर्वक काम किया। हाल ही में एक्सेल (सभी संस्करणों) ने शिकायत करना शुरू किया "एक्सेल को 'zot.xlsx' में अपठनीय सामग्री मिली। क्या आप इस कार्यपुस्तिका की सामग्री को पुनर्प्राप्त करना चाहते हैं?"। हम एक मेमोरीस्ट्रीम का उपयोग स्टोर के रूप में एक वेब अनुप्रयोग में फ़ाइल बना रहे हैं, जिसे बाद में एक बाइट [] के रूप में एक HTTP प्रतिक्रिया में "अनुप्रयोग/vnd.openxmlformats-officedocument.spreadsheetml.sheet" के एमआईएम प्रकार के साथ भेजा जाता है। खराब फ़ाइल की अनजिप सामग्री किसी त्रुटि के बिना फ़ाइल की अनजिप सामग्री के समान थी।मेमोरीस्ट्रीम

+3

यह आपके स्वयं के प्रश्न का उत्तर देने के लिए बहुत अच्छा फॉर्म है। लेकिन सवाल में जवाब देने का यह बुरा तरीका है :) आपको जवाब को उत्तर के रूप में रखना चाहिए और इसे सही के रूप में चिह्नित करना चाहिए, इसलिए आपका प्रश्न अनुत्तरित प्रश्नों की सूची में नहीं आया है। –

उत्तर

9

हमने इसे कई घंटों तक पीछा किया, जिसने रास्ते में कुछ लाल बालियां उठाईं, लेकिन अंत में, हल किया कि खराब फ़ाइल एक सम्मान में अलग थी। फ़ाइल की लंबाई अलग थी। मेमोरीस्ट्रीम लौटने से पहले और बाइट [] को HTTP प्रतिक्रिया में लिखने से पहले, सुनिश्चित करें कि आप मेमोरीस्ट्रीम को छोटा कर दें ताकि एक सरल 'stream.Capacity = stream.Length;' का उपयोग करके इसकी क्षमता और लंबाई समान हो।

ऐसा प्रतीत होता है कि एक्सेल अब फ़ाइल में अतिरिक्त सामग्री को 'अपठनीय सामग्री' के रूप में सुरक्षा जोखिम के रूप में पहचानता है और कष्टप्रद त्रुटि को फेंकता है, जब अतीत में यह जोखिम स्वीकार करेगा।

नोट: मूल पोस्टर, जो पहले अपने प्रश्न में

+0

ओएमजी! धन्यवाद! यह मुझे बहुत समय बचाया। – Json

+0

इसने मेरे लिए समस्या का समाधान नहीं किया :( – Renan

1

चेक जवाब था से लिया जवाब एक के बाद एक निम्नलिखित एक्सेल से "अस्पष्ट सामग्री त्रुटि" दूर करने के लिए।

1. सुनिश्चित करें कि सही सेल में सही डेटा सही तरीके से लिखा गया है। इसे सभी कोशिकाओं के लिए करें। ऐसा हो सकता है कि एक बार सेल में गलत तरीके से लिखा गया डेटा इस समस्या का कारण बनता है। सेल इंडेक्स सही ढंग से उपयोग किया जाता है।

2. साझा स्ट्रिंग के बजाय Cell.DataType = new EnumValue (CellValues.String) का उपयोग करके प्रयास करें। यह त्रुटि को हटाने में मदद कर सकता है।

3. यदि किसी भी कक्ष में # VALUE/# REF/# NAME है? या #DIV त्रुटि, उन त्रुटि को हटा दें।

4. सर्वर से फ़ाइल डाउनलोड करते समय यह समस्या आती है। मेमोरीस्ट्रीम का उपयोग करके और इसे डाउनलोड करने के लिए वेब अनुप्रयोग में एक्सेल स्प्रेडशीट बनाना। आप ASPOSE प्रौद्योगिकी का उपयोग कर रहे हैं HttpContext.Current.Response.Clear()

Response.ClearHeaders() 

    Response.Buffer = False 

    msReportStream = CType(controller.GetFromSession 
     (Constants.SESSION_REPORT), MemoryStream) 

    Response.ContentType = "application/vnd.openxmlformats- 
     officedocument.spreadsheetml.sheet" 

    Response.AddHeader("Connection", "Keep-Alive") 

    Response.AddHeader("Content-Disposition", String.Format("attachment; 
     filename={0}", strReportFileName)) 

    Response.ContentEncoding = Encoding.UTF8 

    Response.BinaryWrite(msPNLReportStream.ToArray()) 

    Response.Flush() 

    Response.Close() 

    Response.End()--use this when the code is deployed in server only not required in local.gives error in local. 

    msReportStream.Dispose() 

    msReportStream.Close() 

, का उपयोग

Me.Response.Clear()

Me.Response.Buffer = False 

Me.Response.AddHeader("Accept-Ranges", "bytes") 

Response.ContentType = "application/octet-stream" 

Response.AddHeader("Connection", "Keep-Alive") 

Response.ContentEncoding = Encoding.UTF8 

asposeReport.ShowSavePopUp(Me.Response, controller.GetFromSession(Constants.SESSION_REPORT), strReportFileName) 
                             Me.Response.Flush() 
      Me.Response.Close() 
      Me.Response.End() 
:

निम्नलिखित कोड का उपयोग

0

माइक्रोसॉफ्ट ऑफिस के लिए .xlsx फ़ाइल खोलने के लिए ओपन एक्सएमएल एसडीके 2.5 उत्पादकता उपकरण का उपयोग करें और दस्तावेज़ को सत्यापित करें इससे आपको कोई सत्यापन त्रुटियां मिलेंगी जो अपठनीय cont ent