I have the code below to read data from an excel file, the problem I am running into is that when I try to read the range data, I get an exception "Cannot perform runtime binding on a null reference" on this line
我有以下代码从excel文件中读取数据,我遇到的问题是,当我尝试读取范围数据时,我得到一个异常“无法在此行上对空引用执行运行时绑定”
if (Int32.TryParse(xlRange.Cells[1, 4].Value2.ToString(), out value))
What I want to know is how I do access the information in the range properly please. Thanks in advance
我想知道的是我如何正确访问该范围内的信息。提前致谢
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 个解决方案
#1
7
if (xlRange.Cells[row, 1].Text == "")
{
xlRange.Cells[row, 1].value = "Blank";
}
The above code will resolve this problem. However Blank
wont be there in the cell. But it will allow you to proceed further. Basically C# / Excel does not like null
.
上面的代码将解决此问题。然而空白不会在细胞中。但它会让你继续前进。基本上C#/ Excel不喜欢null。
#2
1
What if you use "Convert.ToString()" rather than ".ToString()"? If "xlRange.Cells[1, 4].Value2" is null then it won't have a .ToString() function and, if i'm thinking correctly, should throw an exception. The difference between Convert.ToString() and .ToString() is that Convert.ToString() will return a null value, whereas .ToString() will blowup.
如果使用“Convert.ToString()”而不是“.ToString()”怎么办?如果“xlRange.Cells [1,4] .Value2”为null,那么它将没有.ToString()函数,如果我正确思考,应抛出异常。 Convert.ToString()和.ToString()之间的区别在于Convert.ToString()将返回空值,而.ToString()将会爆炸。
Can you set a break point before that code executes to ensure that the xlRange actually contains information in it?
你能在代码执行之前设置一个断点来确保xlRange实际上包含信息吗?
#1
7
if (xlRange.Cells[row, 1].Text == "")
{
xlRange.Cells[row, 1].value = "Blank";
}
The above code will resolve this problem. However Blank
wont be there in the cell. But it will allow you to proceed further. Basically C# / Excel does not like null
.
上面的代码将解决此问题。然而空白不会在细胞中。但它会让你继续前进。基本上C#/ Excel不喜欢null。
#2
1
What if you use "Convert.ToString()" rather than ".ToString()"? If "xlRange.Cells[1, 4].Value2" is null then it won't have a .ToString() function and, if i'm thinking correctly, should throw an exception. The difference between Convert.ToString() and .ToString() is that Convert.ToString() will return a null value, whereas .ToString() will blowup.
如果使用“Convert.ToString()”而不是“.ToString()”怎么办?如果“xlRange.Cells [1,4] .Value2”为null,那么它将没有.ToString()函数,如果我正确思考,应抛出异常。 Convert.ToString()和.ToString()之间的区别在于Convert.ToString()将返回空值,而.ToString()将会爆炸。
Can you set a break point before that code executes to ensure that the xlRange actually contains information in it?
你能在代码执行之前设置一个断点来确保xlRange实际上包含信息吗?