2012-11-15 25 views
7

मुझे एक System.com_object त्रुटि मिल रही है यदि मैं एक्सेल सेल को खाली करने की कोशिश कर रहा हूं जो खाली है। मेरा कोड है:C# .net में EXCEL इंटरऑप एपीआई का उपयोग करके खाली सेल मान को कैसे पढ़ा जाए?

public static List<OrderPC> getFilters(string fileCheckout) 
    { 
     List<OrderPC> orderPCs = new List<OrderPC>(); 
     XLDoc sldoc = new XLDoc(); 

     string localPath = @"C:\Temp\PCs.xlsx"; 

     Microsoft.Office.Interop.Excel.Application oXL=null; 
     Microsoft.Office.Interop.Excel.Workbook mWorkBook=null; 
     Microsoft.Office.Interop.Excel.Worksheet mWSheet1=null; 
     Microsoft.Office.Interop.Excel.Range xlRange=null; 
     try 
     { 
      oXL = new Microsoft.Office.Interop.Excel.Application(); 

      mWorkBook = oXL.Workbooks.Open(localPath); 

      mWSheet1 = mWorkBook.Sheets[1]; 

      xlRange = mWSheet1.UsedRange; 

      foreach (Microsoft.Office.Interop.Excel.Hyperlink hl in xlRange.Hyperlinks) 
      { 

       int y = hl.Range.Column; 

       int z = hl.Range.Row; 

       string vFilter = mWSheet1.Cells[z, y + 1].Value2.Trim(); 

       if (vFilter.CompareTo("Weekly") == 0) 
       { 
        String baseUri = "http://xxx.yyy.net?"; 
        int followUpIndex = baseUri.Length; 
        OrderPC orderPc = new OrderPC(); 
        orderPc.ProductClass = hl.TextToDisplay.Trim(); 
        orderPc.HyperLink = hl.Address.Trim().Substring(followUpIndex); 
        orderPc.SpecType = mWSheet1.Cells[z, y - 1].Value2.Trim(); 
        if (mWSheet1.Rows[z].Cells[y + 3] != null || mWSheet1.Rows[z].Cells[y + 3].Value2 != string.Empty) 
         { 
          orderPc.ManufactureDate = mWSheet1.Cells[z, y + 3].Value2.ToString(); //Here is the error** 
         } 
        //Console.WriteLine(orderPc.ProductClass+"----"+orderPc.HyperLink); 

        orderPCs.Add(orderPc); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
     } 
     finally 
     { 
      GC.Collect(); 
      GC.WaitForPendingFinalizers(); 

      Marshal.FinalReleaseComObject(xlRange); 
      Marshal.FinalReleaseComObject(mWSheet1); 

      mWorkBook.Close(Type.Missing, Type.Missing, Type.Missing); 
      Marshal.FinalReleaseComObject(mWorkBook); 

      oXL.Quit(); 
      Marshal.FinalReleaseComObject(oXL); 
     } 
     return orderPCs; 
    } 

इस एक्सेल फ़ाइल में 10 कॉलम हैं और मुझे लगता है कि मैं एक वैध सेल पढ़ रहा हूं। त्रुटि ** है "

{Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform runtime binding on a null reference
at CallSite.Target(Closure , CallSite , Object)
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)

" ** मैं अपने कॉम के बाद से किसी भी सुराग नहीं है। सहायता बहुत सराहना की है।

+0

आप तारीख को इस स्ट्रिंग परिवर्तित कर सकते है, क्योंकि यह असफल नहीं होगा एक और चेक

if (mWSheet1.Cells[z, y + 3].Value2 != null) 

जोड़ें या स्ट्रिंग के लिए कनवर्ट निम्नलिखित कोड का उपयोग कर,: mWSheet1.Cells [ जेड, वाई + 3]। वैल्यू 2.ToString(); और कोशिश करने के बजाय ?! – Sylca

+0

यदि मैं रिक्त कक्षों के साथ कुछ भी करता हूं तो यह ऊपर उल्लिखित त्रुटि को फेंकता है। – Sulekha

उत्तर

11

अगर Value2 अशक्त

orderPc.ManufactureDate = Convert.ToString(mWSheet1.Cells[z, y + 3].Value2); 
+1

यह काम किया .. मैंने ऑर्डर करने की भी कोशिश की .ManufactureDate = "" + mWSheet1.Cells [z, y + 3]। Value2; और इसके कामकाज .. हालांकि .. – Sulekha

+1

कनवर्ट करें। ToString() के बजाय मेरे लिए काम किया। यह वास्तव में कई अन्य स्थानों पर मेरे लिए इस मुद्दे को हल करेगा क्योंकि मुझे इससे अनजान था। धन्यवाद! –