从Excel SpreadSheet读取数据 - 无法对空引用执行运行时绑定

时间:2012-07-21 15:52:54

标签: c# excel ms-office excel-interop

我有以下代码从excel文件中读取数据,我遇到的问题是当我尝试读取范围数据时,我在此行上获得异常“无法对空引用执行运行时绑定”

if (Int32.TryParse(xlRange.Cells[1, 4].Value2.ToString(), out value)) 

我想知道的是我如何正确访问该范围内的信息。提前致谢

void ReadFromExcelToGrid2(String fileNameString)
        {
            try
            {
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(fileNameString);
                //get list of worksheets associated with the current workbook
                Microsoft.Office.Interop.Excel.Sheets worksheets = xlWorkbook.Worksheets;
                //list the work books in a dropdownlist 
                IDictionary<int, String> sheets = new Dictionary<int, String>();
                foreach (Microsoft.Office.Interop.Excel.Worksheet displayWorksheet in xlWorkbook.Worksheets)
                {
                    sheets.Add(displayWorksheet.Index, displayWorksheet.Name);
                }
                cmbWorksheets.DataSource = new BindingSource(sheets, null);;
                cmbWorksheets.DisplayMember = "Value";
                cmbWorksheets.ValueMember = "Key";

                Microsoft.Office.Interop.Excel.Worksheet xlWorksheet = xlWorkbook.Sheets[4]; // assume it is the first sheet
                Microsoft.Office.Interop.Excel.Range xlRange = xlWorksheet.UsedRange; // get the entire used range
                int value = 0;
                if (Int32.TryParse(xlRange.Cells[1, 4].Value2.ToString(), out value)) // get the F cell from the first row
                {
                    int numberOfColumnsToRead = value * 4;
                    for (int col = 7; col < (numberOfColumnsToRead + 7); col++)
                    {
                        Console.WriteLine(xlRange.Cells[1, col].Value2.ToString()); // do whatever with value
                    }
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            }

2 个答案:

答案 0 :(得分:7)

if (xlRange.Cells[row, 1].Text == "")
{
    xlRange.Cells[row, 1].value = "Blank";
}

以上代码将解决此问题。但是Blank不会出现在单元格中。但它会让你继续前进。基本上C#/ Excel不喜欢null

答案 1 :(得分:1)

如果您使用“ Convert.ToString()”而不是“ .ToString()”怎么办?如果“xlRange.Cells [1,4] .Value2”为null,那么它将没有.ToString()函数,如果我正确思考,应抛出异常。 difference between Convert.ToString() and .ToString()是Convert.ToString()将返回空值,而.ToString()将会爆炸。

您可以在代码执行之前设置一个断点,以确保xlRange实际上包含信息吗?