8

空の EXCEL セルを読み取ろうとすると、System.com_object エラーが発生します。私のコードは次のとおりです。

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;
    }

この Excel ファイルには 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)

"** その COM 以来、手がかりがありません。助けていただければ幸いです。

4

2 に答える 2

15

別のチェックを追加

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

または、次のコードを使用して文字列に変換します。これは、Value2 が null の場合でも失敗しないためです。

orderPc.ManufactureDate = Convert.ToString(mWSheet1.Cells[z, y + 3].Value2);
于 2012-11-15T15:56:13.020 に答える