日期:2014-05-18  浏览次数:20969 次

未将对象引用设置到对象的实例”问题
C# code

   using MSExcel=Microsoft.Office.Interop.Excel;
   
   private void InsertXlsToDataBase()//将Excel文件中的数据导入数据库中
        {
            int i = 2;
            string cName = "", cId = "";

            MSExcel.Application XlsA = new MSExcel.Application();

            if (XlsA == null)
            {
                MessageBox.Show("无法创建Excel对象,情检查Excel是否可用或者是否安装好Excel!", "系统提示");
                return;
            }

            MSExcel.Workbooks XlsW = XlsA.Workbooks;
            MSExcel.Workbook XlsW1 = XlsW.Add(cFilePath);
            MSExcel.Sheets XlsS = XlsW1.Sheets;
            MSExcel.Worksheet XlsS1 = (MSExcel.Worksheet)XlsS[1];

            try
            {
                while (XlsA.get_Range(XlsA.Cells[i,1],XlsA.Cells[i,1]).Value2.ToString().Trim() != "")
                {
                    cName = XlsA.get_Range(XlsA.Cells[i, 1], XlsA.Cells[i, 1]).Value2.ToString();
                    cId = XlsA.get_Range(XlsA.Cells[i, 2], XlsA.Cells[i, 2]).Value2.ToString();

                    string SqlStr = "insert into Table1(cName,cId) values('" + cName + "','" + cId + "')";

                    CDataBase.UpdateDB(SqlStr);

                    i++;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                XlsW.Close();
                XlsA.Quit();
            }
        }



以上代码可以运行,但运行时就报“未将对象引用设置到对象的实例”;实在是找不出来哪里错了,请大家帮帮忙

------解决方案--------------------
(MSExcel.Worksheet)XlsS[1];

XlsA.get_Range(XlsA.Cells[i,1],XlsA.Cells[i,1]).Value2.ToString().Trim()
------解决方案--------------------
F11单步,判断为null
------解决方案--------------------
你调试看 在哪报错的 这个错误是对象为空时候 要调用该对象抛出的异常!
------解决方案--------------------
单步调试,看看问题出在哪段? 然后再分析
------解决方案--------------------
在函数开始位置设置断点
然后进行调试,到断点后按F11进行单步执行,这个时候函数就每次执行一步
然后你就能看到在哪个位置抛出的该异常,是哪个对象抛出的
这样就容易改了!
做程序要会调试的

------解决方案--------------------
未将对象引用设置到对象的实例

就是使用了某个空对象,你就找找哪个对象可能是null。

MSExcel.Sheets XlsS = XlsW1.Sheets;
XlsS == null ?

XlsA.get_Range(XlsA.Cells[i,1],XlsA.Cells[i,1]).Value2.ToString().Trim() 
XlsA.get_Range(XlsA.Cells[i,1],XlsA.Cells[i,1]) == null?

2楼也说了,单步调试一下吧。

------解决方案--------------------
if(XlsA.get_Range(XlsA.Cells[i,1],XlsA.Cells[i,1]).Value2!=null)
{
//再写你的代码
}
因为如果XlsA.get_Range(XlsA.Cells[i,1],XlsA.Cells[i,1]).Value2=null,这.ToString()就会未将对象实例化的