使用interop从excel中提取数据 - 忽略不包含数据的某些单元格

时间:2010-10-27 08:43:13

标签: c# visual-studio-2008 excel-2007

我正在使用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)

干杯,安迪。

1 个答案:

答案 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

的原因