2010-04-13 3 views
8

Как я могу получить адрес ячейки из Excel заданной строки и номер столбца, напримерКак я могу получить адрес ячейки из Excel

строка 2 и столбец 3 должен вернуть C2 ... Пожалуйста, помогите

+0

Смотрите также: http://stackoverflow.com/questions/181596/how-to-convert-a-column-number-eg-127-into- a-excel-column-eg-aa – Graham

ответ

10

Я не большой пользователь 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).

0

Можете ли вы как-то назвать собственные формулы или функции Excel, которые дублируют их функциональность? Было бы просто

=CELL("address") 
-1
public string GetCellAddress(int row, int col) { 
     return (char)((int)'A' + (row - 1)) + col.ToString(); 
} 
+0

Спасибо, Тиморес ... невозможно получить его из объекта Excel Interop ??? – Sathish

+0

Это будет ответ Аластер. – Timores

+0

Это вернет неправильное значение: строка 1 col 27 вернет A27, которая будет столбцом 1 строки 27. Только переключение строки и col вернется [1, что также неверно. Правильно будет AA1. –

2

Это один (непроверенные) также должны работать с адресами столбцов над тем старше 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(); 
} 

Исправлено: адрес столбца был назад

+3

Это вернет BA1 для col 27 вместо AA1. –

3

Просто улучшение, то 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(); 
    } 
0

Я использую с нуля строк и столбцов индекса. Поэтому мне пришлось адаптировать код предыдущих ответов к следующему. Потребовалось несколько проб и ошибок, чтобы получить это право для всех возможных адресов 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(); 
    } 
Смежные вопросы