Как найти название или заголовок столбца?
Например, если я выбираю столбец 5 в Excel, это означает, что мне нужен результат как «E». Как получить алфавит или букву, соответствующую номеру столбца.
Пожалуйста, помогите мне с кодом
Как найти название или заголовок столбца?
Например, если я выбираю столбец 5 в Excel, это означает, что мне нужен результат как «E». Как получить алфавит или букву, соответствующую номеру столбца.
Пожалуйста, помогите мне с кодом
Как насчет использования Application.ActiveCell.get_Address(true, true, Excel.AlReferenceStyle.xlA1, missing, missing)
, а затем синтаксического анализа строки результата или использования RegEx для получения заголовка столбца?
Я просто использовал:
string location = Application.ActiveCell.get_Address(true, true, Excel.AlReferenceStyle.xlA1, missing, missing);
string tokens = x.Split("$".ToCharArray());
MessageBox.Show(String.Format("Column {0}", result[0]));
Ниже приведен полный метод, который дает вам соответствующий алфавит для переданного целочисленного значения.
private String Number2String(int number, bool isCaps)
{
int number1 = number / 27;
int number2 = number - (number1 * 26);
if (number2 > 26)
{
number1 = number1 + 1;
number2 = number - (number1 * 26);
}
Char a = (Char)((isCaps ? 65 : 97) + (number1 - 1));
Char b = (Char)((isCaps ? 65 : 97) + (number2 - 1));
Char c = (Char)((isCaps ? 65 : 97) + (number - 1));
string d = String.Concat(a, b);
if (number <= 26)
return c.ToString();
else
return d;
}
Я использую эти два:
public string GetExcelColumn(int index)
{
int quotient = index / 26;
if (quotient > 0)
return GetExcelColumn(quotient - 1) + (char)((int)'A' + (index % 26));
else
return "" + (char)((int)'A' + index);
}
static IEnumerable<string> GetExcelColumns()
{
var alphabet = new string[]{""}.Union(from c in Enumerable.Range((int)'A', 26) select Convert.ToString((char)c));
return from c1 in alphabet
from c2 in alphabet
from c3 in alphabet.Skip(1) // c3 is never empty
where c1 == string.Empty || c2 != string.Empty // only allow c2 to be empty if c1 is also empty
select c1 + c2 + c3;
}
Это хорошо работает в VBA с использованием двойной замены, где R - это диапазон Excel с одной ячейкой:
ColumnLetter = Replace(Replace(R.AddressLocal(ReferenceStyle:=1), "$", vbNullString), R.Row, vbNullString)
Он основан на аналогичной идее для использования на рабочем листе. В формуле клетки используйте это, это еще короче:
=SUBSTITUTE(ADDRESS(1,COLUMN(M1),4),1,"")
Это возвращает букву M и работает вплоть до столбца XFD. Ссылка на ячейку M1 может быть любым диапазоном в любом месте. Верхний левый столбец возвращается для диапазонов или более чем одной ячейки.
Он получает АДРЕС первой ячейки в столбце, а затем удаляет конечную 1, заменяя ее на NullString. (4 в АДРЕСЕ гарантирует, что адрес будет возвращен как относительный адрес, то есть без знаков и $ в нем.)
Спасибо Барри Гудини, который отправил меня на поиски хорошего ответа на этот вопрос.