2012-01-17 15 views
5

मैंने पहले ही कुछ खोज किया है, this, this, this और अधिक, लेकिन कोई सुराग नहीं है, इसलिए मुझे आपको लोगों से पूछना होगा।यह सत्यापित करने के लिए कि कोई फ़ाइल एक वैध एक्सेल स्प्रेडशीट है या नहीं?

मैं इंटरऑप के माध्यम से एक एक्सेल फ़ाइल खोलने की कोशिश कर रहा हूं, और मेरे पास Office 2007 स्थापित है, इसलिए मैं Microsoft.Office.Interop.Excel संस्करण 14.0 का उपयोग कर रहा हूं।

जब मैं एक मान्य xls फ़ाइल खोलने का प्रयास करता हूं, तो सब ठीक हो जाता है।

लेकिन यदि मैं इंटरऑप के माध्यम से एक अवैध फ़ाइल (बिटमैप, या निष्पादन योग्य) खोलने का प्रयास करता हूं, तो एक्सेल शिकायत या चेतावनी के बिना इसे खोलता है।

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

मैं अपने एक्सेल ऑब्जेक्ट रीडर का यूनिट परीक्षण लिखने की कोशिश कर रहा हूं। मामलों में से एक एक अवैध फ़ाइल खोलने का प्रयास करना है।

कुछ कोड मदद करने के लिए: आवेदन निर्माण:

_app = new Application() 
     { 
      Visible = false, 
      DisplayAlerts = false,  // <-- I don't want to remove this. 
      AskToUpdateLinks = false, 
     }; 

वर्कबुक उद्घाटन:

_workbooks.Open(filename); 
    _workbook = _workbooks.get_Item(1); // 1-based. 
    _worksheets = _workbook.Sheets; 

संपादित करें: एक्सेल लोड अवैध फाइल: बस 1 में अधिक जानकारी जोड़ने के लिए। DisplayAlerts सही पर सेट किया जाता है, यह शिकायत (एक संवाद खोलने) कार्यपुस्तिका बताए दूषित हो रहा है, लेकिन DisplayAlerts गलत पर सेट है, तो यह फ़ाइल बस के रूप में नीचे लोड करता है:

Excel Loads Invalid File

+0

वैध फ़ाइल ext.csv या xls के लिए जांच के चारों ओर एक तरह से एक आसान तरीका लगता है ... – MethodMan

+0

आप देख सकते हैं कि _app.Ready प्रॉपर्टी अवैध फ़ाइल लोड करते समय गलत हो जाती है या नहीं। सिर्फ एक विचार मैंने कोशिश नहीं की है। – Tod

+0

@ डीजे क्राज़, मैं फ़ाइल लोड करने से पहले विस्तार से पहले ही जांच कर रहा हूं। लेकिन क्या होगा यदि कोई फ़ाइल एक्सटेंशन बदलता है और इसके बजाय .exe लोड करने का प्रयास करता है? – Machado

उत्तर

8

मैं सिर्फ एक और दृष्टिकोण का उपयोग कर समाप्त हो गया: Excel कार्यपुस्तिका एक संपत्ति FileFormat कहा जाता है। जब एक्सेल गलत फ़ाइल को खोलता है, यह पाठ के प्रगणक मूल्यों से एक के लिए फ़ाइल स्वरूप सेट:

XlFileFormat.xlTextMac 
    XlFileFormat.xlTextMSDOS 
    XlFileFormat.xlTextPrinter 
    XlFileFormat.xlTextWindows 

और यह गणन के अंदर एक्सेल वैध फ़ाइलें (मेरा उद्देश्य के लिए मान्य है):

XlFileFormat.xlExcel12 
    XlFileFormat.xlExcel7 
    XlFileFormat.xlExcel8 
    XlFileFormat.xlExcel9795 

bool validFile = (f == XlFileFormat.xlExcel12 ) 
        || (f == XlFileFormat.xlExcel7 ) 
        || (f == XlFileFormat.xlExcel8 ) 
        || (f == XlFileFormat.xlExcel9795); 

और अब मैं:

तो मैं एक साधारण "or" का उपयोग कर फ़ाइल की तरह फिल्टर करने के लिए मैं चाहता हूँ आयात करने के लिए समाप्त हो गया टी काम करता है। आपकी मदद दोस्तों के लिए धन्यवाद, आपने मुझे सही दिशा में सेट किया है।

3

आप देख सकते हैं फ़ाइल लोड करने से पहले और बाद में कार्यपुस्तिका गिनती। यदि दोनों मायने रखती हैं, तो फ़ाइल लोड होने में विफल रही।

int countBefore = _workbooks.get_Count(); 
_workbooks.Open(filename); 
int countAfter = _workbooks.get_Count(); 
if (countBefore == countAfter) { 
    // The file failed to load. 
} 
+0

अच्छा! लेकिन रकम 1 गिनती है, क्योंकि टीचैन रैम! एक्सेल अवैध फ़ाइल लोड करता है।लेकिन यह एक स्प्रेडशीट की तरह नहीं दिखता है, क्योंकि एक्सेल फ़ाइल की सामग्री को अजीब रूप से लोड करता है। कृपया संपादन देखें। – Machado

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

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