2015-11-19 1 views
0

Я работаю с excel при импорте записей в программу, которую я сейчас создаю. Я обычно получаю запись из Excel и сохранить его в массив через индекс столбца следующим образом:Сохранять выбранное значение столбца из Excel в массив с использованием букв столбца в C# Excel Interop

Excel.Range xlRange = xlWorksheet.UsedRange; 
string[,] arr = new string[rowCount, colCount]; 

for (int i = 1; i <= rowCount; i++) 
{ 
    for (int j = 1; j <= colCount; j++) 
    { 
     arr[i, j] = xlRange.Cells[i, j].Value; 
    } 
} 

Теперь, в работе я сейчас делаю, индекс столбца неизвестно. Единственным данным является столбец Name, такой как столбец «AP», «QR» и т. Д. Пользователь будет определять, в каком столбце он получит данные.

Есть ли способ, как arr[i, j] = xlRange.Cells["AP", j].Value;?

Примечание:

массив будет содержать данные из двух или более столбцов, а не только один.

+0

Вы знаете, какая строка т.е. , строка не содержит ваши столбцы? – Ram

+0

Столбцы, которые видны в верхней части превосходного. Например, ячейка A1, столбец «A»; AP2, столбец «AP». – ThEpRoGrAmMiNgNoOb

ответ

1

Я нашел ответ here. Преобразуйте названия колонок в следующие функции:

public static int GetColumnNumber(string name) 
{ 
    int number = 0; 
    int pow = 1; 
    for (int i = name.Length - 1; i >= 0; i--) 
    { 
     number += (name[i] - 'A' + 1) * pow; 
     pow *= 26; 
    } 

    return number; 
} 

Измените индекс строки на преобразованное число.

arr[i, j] = xlRange.Cells[GetColumnNumber("PA"), j].Value; 
1

Я думаю, что Range или get_Range индексатор в C# будут использовать либо строку/столбец или описание семантических клеток. Таким образом, любой из них должен работать:

Excel.Range r = sheet.Range[1, 1]; 

или

Excel.Range r = sheet.Range["A1"]; 

Что означает, что вы могли бы даже просто так, и пусть Excel с поднятием тяжестей:

public string GetRange(string Column, int Row) 
{ 
    return string.Format("{0}{1}", Column, Row); 
} 
Смежные вопросы