C# 使用互操作从excel提取数据-忽略不包含数据的某些单元格

C# 使用互操作从excel提取数据-忽略不包含数据的某些单元格,c#,visual-studio-2008,excel-2007,C#,Visual Studio 2008,Excel 2007,我使用c#和visual studio从excel工作表中提取数据,将其放入数组(在每个字符串的末尾添加逗号),然后将其输出到.CSV文件 现在我遇到了一个障碍,当一个单元格没有数据,或者没有预期的数据(即图像)时就会发生 我假设这是在excel工作表的读取端,而不是输出到.CSV,因为当我得到这个错误时,我没有将任何数据放入数组 下面是我正在使用的代码片段,它改编自Microsoft使用互操作访问Excel数据的示例 //Get a range of data.

我使用c#和visual studio从excel工作表中提取数据,将其放入数组(在每个字符串的末尾添加逗号),然后将其输出到.CSV文件

现在我遇到了一个障碍,当一个单元格没有数据,或者没有预期的数据(即图像)时就会发生

我假设这是在excel工作表的读取端,而不是输出到.CSV,因为当我得到这个错误时,我没有将任何数据放入数组

下面是我正在使用的代码片段,它改编自Microsoft使用互操作访问Excel数据的示例

    //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");


            }
//获取一系列数据。
范围=对象表。获取范围(范围1,范围2);
//从范围中检索数据。
物体[,]纱布;
saRet=(System.Object[,])range.get_值(缺少.Value);
//确定数组的维度。
长长的彩虹;
长图标;
iRows=saRet.GetUpperBound(0);
iCols=saRet.GetUpperBound(1);
//生成包含数组数据的字符串。
字符串值字符串;
valueString=“价格”;
System.IO.StreamWriter OutWrite=新的System.IO.StreamWriter(“h:\\out.csv”);

对于(长rowCounter=1;rowCounter这条线是危险的:

valueString = String.Concat(valueString, saRet[rowCounter, colCounter].ToString() + ", ");
由于
saRet[rowCounter,colCounter]
的结果可能为空。如果空单元格可以接受空字符串,请使用
Convert.ToString()
,这将把空字符串解释为空字符串:

valueString = String.Concat(valueString, Convert.ToString(saRet[rowCounter, colCounter]) + ", ");

我怀疑这就是为什么您会得到
NullReferenceException

,它确实为我提供了更合理的数据并避免了错误。非常感谢!