我正在使用c#和visual studio从excel表中提取数据,将其放入数组(在每个字符串的末尾添加逗号),然后将其输出到.CSV文件。
现在,当一个单元格没有数据或没有预期的数据(即图像)时,我遇到了一个障碍。
我假设这是在excel表的读取端,而不是输出到.CSV,因为当我收到此错误时,我没有将任何数据放入数组中。
这是我正在使用的代码片段,它是使用互操作来访问Excel数据的Microsoft示例改编的。
//Get a range of data.
range = objSheet.get_Range(ranges1, ranges2);
//Retrieve the data from the range.
Object[,] saRet;
saRet = (System.Object[,])range.get_Value(Missing.Value);
//Determine the dimensions of the array.
long iRows;
long iCols;
iRows = saRet.GetUpperBound(0);
iCols = saRet.GetUpperBound(1);
//Build a string that contains the data of the array.
String valueString;
valueString = "Prices";
System.IO.StreamWriter OutWrite = new System.IO.StreamWriter("h:\\out.csv");
for (long rowCounter = 1; rowCounter <= iRows; rowCounter++)
{
for (long colCounter = 1; colCounter <= iCols; colCounter++)
{
//Write the next value into the string.
valueString = String.Concat(valueString,
saRet[rowCounter, colCounter].ToString() + ", ");
}
//Write in a new line.
valueString = String.Concat(valueString, "\n");
}
我收到的错误与system.object行有关:
错误:对象引用未设置为对象的实例,Line:WindowsFormApplication2
(不,我还没有重新命名我的项目:P)
干杯,安迪。
答案 0 :(得分:0)
这条线很危险:
valueString = String.Concat(valueString, saRet[rowCounter, colCounter].ToString() + ", ");
...因为saRet[rowCounter, colCounter]
的结果可能为空。如果空字符串对于空单元格是可接受的,请使用Convert.ToString()
,这将空值解释为空字符串:
valueString = String.Concat(valueString, Convert.ToString(saRet[rowCounter, colCounter]) + ", ");
我怀疑这就是你获得NullReferenceException
。