2012-03-21 36 views
9

मेरे एएसपीनेट में, सी # एप्लिकेशन हम .xls फ़ाइल जेनरेट और डाउनलोड कर रहे हैं। लेकिन जब मैं खोलने के लिए कोशिश कर रहा हूँ, यह एक संदेश.xls फ़ाइल खोलते समय त्रुटि संदेश क्यों दिखा रहा है

दे रहा है "जिस फ़ाइल को खोलना, 'filename.xls' कोशिश कर रहे हैं, एक अलग फाइल एक्सटेंशन द्वारा निर्दिष्ट से प्रारूप में है। सत्यापित करें कि फ़ाइल दूषित नहीं है और फ़ाइल खोलने से पहले एक विश्वसनीय स्रोत से है। क्या आप अभी फ़ाइल खोलना चाहते हैं? "

यदि मैं 'हां' खोलता हूं तो यह खुलता है। मैंने फ़ाइल एक्सटेंशन को .xlsx में बदल दिया, फिर भी वही संदेश। क्या कोई मुझे बता सकता है कि यह क्यों हो रहा है? मैंने IIS प्रबंधक में .xlsx MIME प्रकार एक्सटेंशन को MIME प्रकार के साथ application/vnd.openxmlformats-officedocument.spreadsheetml.sheet के रूप में जोड़ा है। फिर भी यह वही संदेश दिखा रहा है। कृपया सुझाव दें कि मैं इसे कैसे छुटकारा पा सकता हूं।

+0

कृपया कोड –

+0

भेजें कृपया दिखाएं कि आप एक्सएलएस कैसे उत्पन्न करते हैं? क्या यह एक्सेल एक्सएमएल प्रारूप है, तो एक्सटेंशन एक्सएमएल होना चाहिए। –

+0

आप किस कोड के लिए पूछ रहे हैं? – Sukanya

उत्तर

1

आप पूरी तरह से xls फ़ाइल बनाने करो या आप कॉपी करते हैं और भरने एक टेम्पलेट xls फ़ाइल? एक गलत प्रारूप टेम्पलेट फ़ाइल समस्या का कारण बन सकती है।

इसके अलावा, आप अपनी फ़ाइल भरने के लिए किस प्रदाता का उपयोग करते हैं? - xlsx/xlsm के लिए Microsoft.ACE.OLEDB.12.0? - xls के लिए Microsoft.Jet.OLEDB.4.0?

एक गलत प्रदाता/एक्सटेंशन संयोजन समस्या का कारण बन सकता है। (लाइनों में से कुछ टिप्पणी की के रूप में मुझे याद नहीं क्यों वे उपयोगी कहाँ)

Response.Clear();       
Response.ContentType = "application/vnd.ms-excel"; 
//Response.ContentEncoding = Encoding.Default; 
//Response.Charset=""; 
Response.AddHeader("Content-Disposition: ", 
    String.Format(@"attachment; filename={0}",myfileName)); 

//EnableViewState = false; 

Response.Write(myFileContentAsString); 
Response.Flush(); 
Response.Close(); 
+0

में कई गलत स्तरों में गलत और छोटी गाड़ी है। मैं .xls फ़ाइल बना रहा हूं। सबसे पहले मैं sqlserver डेटाबेस से एसक्यूएल क्वेरी का उपयोग कर डेटा ला रहा हूं। फिर मैं एक ग्रिड व्यू में डेटा populating हूँ। उसके बाद स्ट्रिंगवाइटर और HtmlTextWriter का उपयोग करके मैं स्ट्रिंग अटैचमेंट लिख रहा हूं = "filename =" + File.xls; प्रतिक्रिया। क्लेयरकंटेंट(); प्रतिक्रिया। AddHeader ("सामग्री-स्वभाव", लगाव); Response.ContentType = "एप्लिकेशन/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; GridView1.RenderControl (HTW); Response.Write (sw.ToString()); Response.End(); इस तरह मैं एक्सेल फ़ाइल उत्पन्न कर रहा हूँ। – Sukanya

+0

आपका कोड मेरे जैसा है। लेकिन आपका कोड भी वही संदेश दिखा रहा है। – Sukanya

+0

क्या SQL सर्वर डेटा से एक्सेल फ़ाइल बनाने का कोई अन्य तरीका है? – Sukanya

0

आप फ़ाइल नाम में .xls और एमआईएमई प्रकार में .xlsx का उपयोग कर रहे हैं। Filname.xlsx के साथ प्रयास करें।

+0

मैंने एमआईएमई प्रकार में दोनों एक्सटेंशन की कोशिश की। यह वही संदेश दिखा रहा है। – Sukanya

1

सुनिश्चित नहीं है कि आप एक्सेल करने के लिए डेटा निर्यात कैसे कर रहे हैं। DisplayAlerts को झूठी में सेट करने से मदद मिल सकती है।

xlApp = new Excel.Application(); 
xlApp.DisplayAlerts = false; 

मैं इंटरऑप डीएलएल का उपयोग करता हूं। नामस्थान Microsoft.Office.Interop.Excel होगा। कैसे संदर्भ जोड़ने के लिए नीचे दिए गए लिंक पर में देखें फेंग चेन के जवाब: http://social.msdn.microsoft.com/Forums/en/netfxsetup/thread/c9e83756-4ae2-4ed4-b154-1537f3bb3a22

नीचे दिए गए लिंक भी मदद कर सकता है:

http://www.dotnetperls.com/excel

+0

एक्सेल का उपयोग करने के लिए नेमस्पेस क्या है। आवेदन? – Sukanya

+0

उस डीएल को जोड़कर बहुत सारी समस्याएं उत्पन्न हुईं। यह मुझे प्रोजेक्ट को भी खोलने की अनुमति नहीं दे रहा है ... इसलिए .... – Sukanya

+0

शायद आपको यह उल्लेख करना चाहिए कि आप अपने कोड में एक्सेल निर्यात कैसे कर रहे हैं। – Manoj

3

यह:

अपनी टिप्पणी के अनुसार, यहाँ कोड का एक हिस्सा है, जहां मैं अतीत में किया है वह यह है कि एक पुरानी पोस्ट हो सकती है, लेकिन मैं एक ही मुद्दे के लिए उत्तर खोज रहा हूं, और सोचा कि यह उपयोगी हो सकता है। ऐसा लगता है कि यह आपके एप्लिकेशन को ब्राउज़र में xls फ़ाइल प्रदान करने के तरीके से संबंधित नहीं है। यह Office 2007 के अतिरिक्त सुरक्षा के साथ एक मुद्दा है।

माइक्रोसॉफ्ट के KB article 948615 यह बताते हैं:

जब आप Excel 2007 में एक फ़ाइल खोलने, आप एक चेतावनी है कि फ़ाइल स्वरूप प्रारूप से अलग है प्राप्त होने वाले फ़ाइल नाम एक्सटेंशन निर्दिष्ट।

एकमात्र समाधान क्लाइंट की रजिस्ट्री में प्रवेश को जोड़ना है। मुझे पता है कि वेब एप्लिकेशन के लिए सैकड़ों उपयोगकर्ताओं के साथ वास्तविक समाधान नहीं है, लेकिन कम से कम आप पेज पर एक नोट जोड़ सकते हैं कि उस परेशान चेतावनी को कैसे ठीक किया जाए।

1

चेतावनी एक्स्टेंशन हार्डेनिंग नामक एक्सेल 2007 में एक नई सुरक्षा सुविधा है, जो सुनिश्चित करता है कि फ़ाइल सामग्री खोलने के लिए खोलने वाले खोल कमांड में निर्दिष्ट एक्सटेंशन प्रकार से मेल खाता है। वर्तमान डिज़ाइन आपको Excel में किसी वेब साइट से HTML सामग्री को खोलने की अनुमति नहीं देता है जब तक कि यूआरएल का विस्तार नहीं होता है। एचटीएम /। एचटीएमएल/एमएचटी/एमएचटीएम। ऐसे में एएसपी पेज जो एचटीएमएल लौटाते हैं और एमआईएलएस प्रकार को एक्सएलएस की तरह सेट करते हैं ताकि एचटीएमएल को वेब ब्राउजर के बजाय एक्सेल में खोलने के लिए मजबूर करने की कोशिश की जा सके (जैसा कि अपेक्षित है) हमेशा सुरक्षा चेतावनी प्राप्त करेगा क्योंकि सामग्री एमआईएमई प्रकार से मेल नहीं खाती है।

http://blogs.msdn.com/b/vsofficedeveloper/archive/2008/03/11/excel-2007-extension-warning.aspx

0

फाइल एक्सटेंशन .xls (संस्करण 2003) Office 2007 जबकि और ऊपर संस्करणों इसका समर्थन नहीं करते एचटीएमएल लेआउट का समर्थन करता है।

आपको एक्सेल फ़ाइल को .xlsx प्रारूप में निर्यात करना होगा। मेरे अनुभव से यह सभी संस्करणों में इसका समर्थन करेगा।

बिन फ़ोल्डर में DLLs के नीचे जोड़ें

  • ClosedXML.dll
  • DocumentFormat.OpenXml.dll

कोड फ़ाइल निर्यात करने .xlsx को

DataTable dt = new DataTable(); 
    //Create column and inser rows 
    using (XLWorkbook wb = new XLWorkbook()) 
    {   
       var ws = wb.Worksheets.Add(dt, Sheetname); 
       HttpContext.Current.Response.Clear(); 
       HttpContext.Current.Response.Buffer = true; 
       HttpContext.Current.Response.Charset = ""; 
       HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
       HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + p_FileName + ".xlsx"); 
       using (MemoryStream MyMemoryStream = new MemoryStream()) 
       { 
        wb.SaveAs(MyMemoryStream); 
        MyMemoryStream.WriteTo(HttpContext.Current.Response.OutputStream); 
        HttpContext.Current.Response.Flush(); 
        HttpContext.Current.Response.End(); 
       } 
    }