es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtén el nombre de la columna .xlsx a partir de su índice en C#.

Me gustaría crear una función que convierta un número en una columna de un archivo .csv.

Por ejemplo:
– Número 5 -> Columna E
– Número 29 -> Columna AB

y así sucesivamente.

Hasta ahora he creado esta función:

public class Test
{
public static string GetColumn(int index)
{
StringBuilder col = new StringBuilder();

    const int alpha_count = 26;

    char alpha = (char)64;

    if (index <= alpha_count)
    {
        col.Append(((char)(alpha + index)).ToString());
    }
    else
    {
        // Estoy atascado aquí....

    }

    return col.ToString();
}
static void Main(string[] args)
{

    var col = Test.GetColumn(1);

}

}

Estoy atascado en la condición si el número supera los 26 (la longitud del alfabeto).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para convertir un número en una columna de un archivo .csv, puedes utilizar la siguiente función:

    public static string GetColumn(int index)
    {
        StringBuilder col = new StringBuilder();
    
        const int alpha_count = 26;
    
        char alpha = (char)64;
    
        if (index <= alpha_count)
        {
            col.Append(((char)(alpha + index)).ToString());
        }
        else
        {
            while (index > alpha_count)
            {
                int remainder = index % alpha_count;
                col.Insert(0, ((char)(alpha + remainder)).ToString());
                index = (index - remainder) / alpha_count;
            }
    
            col.Insert(0, ((char)(alpha + index)).ToString());
        }
    
        return col.ToString();
    }
    

    La función convierte el número de entrada en una cadena que representa la columna en el archivo .csv. Si el número de entrada es menor o igual a 26, la función agrega la letra correspondiente a un objeto StringBuilder. Si el número de entrada es mayor a 26, la función entra en un bucle que divide el número de entrada por 26 y toma el residuo en cada paso. Los residuos se convierten en letras y se insertan al inicio del objeto StringBuilder. El bucle continúa hasta que el cociente sea menor o igual a 26, momento en el cual se inserta la letra final al inicio del objeto StringBuilder.

    Por ejemplo, GetColumn(5) retorna "E", GetColumn(29) retorna "AB", y GetColumn(703) retorna "AAA".

Comments are closed.