2010-04-13 29 views
8

¿Cómo puedo obtener la dirección de celda de Excel dado un número de fila y columna, por ejemplo,¿Cómo puedo obtener la dirección de celda de Excel

la fila 2 y 3 col debe devolver C2 ... Por favor, ayuda

+0

Ver también: http://stackoverflow.com/questions/181596/how-to-convert-a-column-number-eg-127-into- an-excel-column-eg-aa – Graham

Respuesta

10

No soy un gran usuario de VSTO C# - Por lo general, opto por VBA. Sin embargo, el siguiente par de funciones puede ser útil para usted. No está seguro si puede simplificarse un poco más:

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]); 
} 

El RangeAddress se llevará a cualquier rango de Excel y lanzar de nuevo la dirección. Si desea el estilo absoluto (con signos de dólar, por ejemplo, $ C $ 3), debe cambiar los dos primeros parámetros de la llamada get_AddressLocal a verdadero, verdadero.

Para obtener la dirección de la celda de un par de filas/columnas, puede usar CellAddress. Necesita una hoja para obtener la dirección. Sin embargo, puede cambiar en (Excel.Worksheet)ActiveSheet si no desea proporcionar una hoja (esto puede funcionar o no, dependiendo de lo que haya abierto en su sesión de VSTO).

0

¿Puedes de alguna manera llamar a las fórmulas nativas de Excel o a las funciones que duplican su funcionalidad? Sería justo

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

Gracias Timores ... ¿no es posible obtenerlo de Excel Interop Object ??? – Sathish

+0

Esa sería la respuesta de @ Alastair. – Timores

+0

Esto devolverá el valor incorrecto: la fila 1 col 27 devolverá A27 que sería la columna 1 fila 27. Simplemente cambiando la fila y col volverá [1 que también es incorrecto. Correcto sería AA1. –

2

este (no probado) también deben trabajar con direcciones en columna sobre que son más de 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(); 
} 

Corregido: la dirección de la columna era al revés

+3

Esto devolverá BA1 para col 27 en lugar de AA1. –

0

células (2, 3). Dirección

3

Sólo una mejora, la col-- estaba en el lugar equivocado

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

estoy usando índice de la fila y la columna de base cero. Así que tuve que adaptar el código de respuestas anteriores a lo siguiente. Tomó algo de prueba y error para hacerlo bien para todas las direcciones posibles i.E. A1, Z2, AA2, 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(); 
    } 
Cuestiones relacionadas