Как я могу получить адрес ячейки из Excel заданной строки и номер столбца, напримерКак я могу получить адрес ячейки из Excel
строка 2 и столбец 3 должен вернуть C2 ... Пожалуйста, помогите
Как я могу получить адрес ячейки из Excel заданной строки и номер столбца, напримерКак я могу получить адрес ячейки из Excel
строка 2 и столбец 3 должен вернуть C2 ... Пожалуйста, помогите
Я не большой пользователь VSTO C# - я обычно выбираю VBA. Однако для вас могут быть полезны следующие функции. Неуверенный, если они могут быть упрощены некоторые больше:
public string RangeAddress(Excel.Range rng)
{
return rng.get_AddressLocal(false, false, Excel.XlReferenceStyle.xlA1,
missing, missing);
}
public string CellAddress(Excel.Worksheet sht, int row, int col)
{
return RangeAddress(sht.Cells[row, col]);
}
RangeAddress
будет принимать любой диапазон Excel и бросить вас назад адрес. Если вы хотите абсолютный стиль (со знаками доллара, например, $ C $ 3), вам нужно изменить первые два параметра вызова get_AddressLocal на true, true.
Чтобы получить адрес ячейки из пары строк/столбцов, вы можете использовать CellAddress
. Ему нужен лист, чтобы получить адрес. Однако вы можете поменять номер (Excel.Worksheet)ActiveSheet
, если вы не хотите предоставлять листы (это может работать или не работать, в зависимости от того, что вы открыли в своей сессии VSTO).
Можете ли вы как-то назвать собственные формулы или функции Excel, которые дублируют их функциональность? Было бы просто
=CELL("address")
public string GetCellAddress(int row, int col) {
return (char)((int)'A' + (row - 1)) + col.ToString();
}
Спасибо, Тиморес ... невозможно получить его из объекта Excel Interop ??? – Sathish
Это будет ответ Аластер. – Timores
Это вернет неправильное значение: строка 1 col 27 вернет A27, которая будет столбцом 1 строки 27. Только переключение строки и col вернется [1, что также неверно. Правильно будет AA1. –
Это один (непроверенные) также должны работать с адресами столбцов над тем старше 26:
using System.Text;
public string GetCellAddress(int row, int col) {
StringBuilder sb = new StringBuilder();
col--;
do {
sb.Insert(0, (char)('A' + (col % 26)));
col /= 26;
} while (col > 0);
sb.Append(row);
return sb.ToString();
}
Исправлено: адрес столбца был назад
Это вернет BA1 для col 27 вместо AA1. –
клеток (2, 3) .Address
Просто улучшение, то col-- был в неправильном месте
static string GetCellAddress(int row, int col)
{
StringBuilder sb = new StringBuilder();
do
{
col--;
sb.Insert(0, (char)('A' + (col % 26)));
col /= 26;
} while (col > 0);
sb.Append(row);
return sb.ToString();
}
Я использую с нуля строк и столбцов индекса. Поэтому мне пришлось адаптировать код предыдущих ответов к следующему. Потребовалось несколько проб и ошибок, чтобы получить это право для всех возможных адресов i.E. A1, Z2, АА2, ZZ10 ...
public string GetAddress(int col, int row)
{
col++;
StringBuilder sb = new StringBuilder();
do
{
col--;
sb.Insert(0, (char)('A' + (col % 26)));
col /= 26;
} while (col > 0);
sb.Append(row + 1);
return sb.ToString();
}
Смотрите также: http://stackoverflow.com/questions/181596/how-to-convert-a-column-number-eg-127-into- a-excel-column-eg-aa – Graham