¿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
¿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
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).
¿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")
public string GetCellAddress(int row, int col) {
return (char)((int)'A' + (row - 1)) + col.ToString();
}
Gracias Timores ... ¿no es posible obtenerlo de Excel Interop Object ??? – Sathish
Esa sería la respuesta de @ Alastair. – Timores
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. –
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
Esto devolverá BA1 para col 27 en lugar de AA1. –
células (2, 3). Dirección
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();
}
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();
}
Ver también: http://stackoverflow.com/questions/181596/how-to-convert-a-column-number-eg-127-into- an-excel-column-eg-aa – Graham