Извлечение данных из Excel с помощью взаимодействия - игнорировать определенные ячейки, где данные не содержатся - PullRequest
1 голос
/ 27 октября 2010

Я использую 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");


            }

Ошибка, которую я получаю, связана со строкой system.object:

Ошибка: ссылка на объект не установлена ​​для экземпляра объекта, строка: WindowsFormApplication2

(Нет, я еще не удосужился переименовать свой проект: P)

Ура, Энди.

1 Ответ

0 голосов
/ 27 октября 2010

Эта строка опасна:

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

... как результат saRet[rowCounter, colCounter] может быть нулевым. Если для пустой ячейки допустима пустая строка, используйте Convert.ToString(), которая будет интерпретировать пустые строки как пустые строки:

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

Я подозреваю, что именно поэтому вы получаете NullReferenceException.

...