2015-08-23 4 views
0

Я могу прочитать столбец excel, используя приведенный ниже код. Код считывает значения в System.Array. И чтобы использовать данные объекта Sytem.Array, я преобразую его в тип списка. Однако для каждой ячейки, прочитанной из excel ... мне нужен его адрес (точнее, строка no). Как я могу это сделать?Как получить значения столбца с адресом ячейки из Excel C#

string sFilePath = "C:\\Mydata.xls";    
xlApp = new Excel.Application(); 
xlWorkBook = xlApp.Workbooks.Open(sFilePath); 
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item("PID"); 
xlApp.Visible = true; 

Excel.Range MyColumn = oExcelSheet.UsedRange.Columns[7]; 
System.Array myvalues = (System.Array)MyColumn.Cells.Value; 
List<string> strArray = myvalues.OfType<string>().Select(o => o.ToString()).ToList(); 

я не знаю, если это помогает, но при проверке в режиме отладки ... System.Array (т.е. myvalues) имеет значение ячеек с индексами точно совпадающих с Им не в клетке, которая является именно то, что я необходимость.

+0

Итак ... почему бы не использовать 'strArray.IndexOf (" все, что строка, которую вы ищете для ")'? –

+0

Я мог бы это сделать, но проблема в том, что некоторые ячейки пусты в столбце. Итак, когда массив преобразуется в список строк ... индексы с пустой строкой s теряются. только ячейки со значениями хранятся в списке. – 911Rapid

ответ

0

Если кому интересно знать ответ ... Код линии ниже фактически пропускает нулевые значения и теряет фактический индекс

List<string> strArray = myvalues.OfType<string>().Select(o => o.ToString()).ToList(); 

Таким образом, вместо того, чтобы использовать код выше ... я пытался явно перебрать значение массива и сохранил индекс для каждого элемента путем добавления «если нуль» проверки и добавления элементов в список

range = xlWorkSheet.UsedRange; 
int rowCount = range.Rows.Count; 

List<string> strArray = new List<string>(); 
for (int i = 1; i < rowCount; i++) 
{ 
    if (myvalues.GetValue(i, 1) == null) 
     strArray.Add(" "); 
    else 
     strArray.Add(myvalues.GetValue(i, 1).ToString()); 
} 
Смежные вопросы