У меня есть приложение C #, которое использует Interop.Excel (v15) для открытия нескольких книг с данными клиентов, их анализа и вывода некоторой информации. Проблема, с которой я столкнулся, заключается в том, что некоторые из ячеек книги имеют значение # N / A; который в Excel является CVErr, указывающим на наличие ошибки определенного типа. В контексте данных наших клиентов они используют # N / A для обозначения неприменимо - нет основной проблемы с формулой, это просто значение, которое они используют.
Когда я использую следующие функции для обхода строк рабочего листа, я получаю значение Int -2146826246 каждый раз, когда сталкиваюсь с # N / A:
private void traverseRows(Excel._Worksheet worksheet)
{
//Get the used Range
Excel.Range usedRange = worksheet.UsedRange;
//Last Row/Column
int lastUsedRow = usedRange.Row + usedRange.Rows.Count - 1;
int lastUsedColumn = usedRange.Column + usedRange.Rows.Columns.Count;
foreach (Excel.Range row in usedRange.Rows)
{
List<String> rowData = rangeToList(row);
}
}
List<string> rangeToList(Microsoft.Office.Interop.Excel.Range inputRng)
{
object[,] cellValues = (object[,])inputRng.Value2;
List<string> lst = cellValues.Cast<object>().ToList().ConvertAll(x => Convert.ToString(x));
return lst;
}
Я пробовал исследовать каждую ячейку по отдельности, но это замедлило работу приложения до того момента, когда оно было непригодным (в большинстве книг есть 10 000 строк по 38 столбцов). Я попытался преобразовать в Text, Value и Value2 безрезультатно. Мне нужно иметь возможность читать значения # N / A в их истинной форме, чтобы я мог проводить сравнения и позже выводить значение в другую книгу. Как лучше всего этого добиться?