El problema del número a columna

¿Cómo podemos convertir un determinado número a columna correspondiente de una hoja de cálculo?

En algún caso podría suceder que necesitáramos saber cual seria la columna de una hoja de calculo teniendo solo el numero de columna

Por ejemplo si el numero es 0, entonces la columna seria “A”, si el numero es 14, la columna seria “O”

Si el numero es 26 entonces la columna seria “AA”.

Usando la siguiente función, nos devolvería su respectiva columna
function entAcol($col_ent){
$hdc = array(0 => "A", 1 => "B", 2 => "C", 3 => "D", 4 => "E", 5 => "F", 6 => "G", 7 => "H", 8 => "I",9 => "J", 10 => "K", 11 => "L", 12 => "M", 13 => "N", 14 => "O", 15 => "P", 16 => "Q", 17 => "R", 18 => "S", 19 => "T", 20 => "U", 21 => "V", 22 => "W", 23 => "X", 24 => "Y", 25 => "Z");
return ($col_ent < 26) ? $hdc[$col_ent] : $hdc[(int)($col_ent/26)-1].$hdc[($col_ent % 26)];
}

Explicación:

Se crea un arreglo llamado hdc, que contiene las letras del alfabeto usado en las columnas de las hojas de calculo.
Y se envía por parámetro el numero que se desea convertir.
Usando un if simplificado, revisamos si el numero es menor a 26.
En ese caso solo devolvería la letra que contiene esa posición en el vector.
En caso de que el numero sea mayor o igual a 26, entonces regresa el numero enviado divido entre 26 y se le resta 1.
Con esto obtenemos la primera letra.
Y se concatena el resultado del numero enviado haciendo una división modular a 26.
Con esto obtendríamos la segunda letra.

Ejemplos

echo entAcol(5);
//Resultado F

echo entAcol(30);
//Resultado AE
número a columna
Nota
En este código, se empieza a contar desde 0 en el vector, si necesitas empezar de 1, puedes cambiar la inicializacion del vector mismo, y subir la validacion a 27, o restar 1 al numero recibido en la función.

angelinux

Desarrollador de páginas web desde el año 2000 y con experiencia en programación de sistemas para empresas desde el 2008; cofundador de CONSoluciones; autor del blog de software libre “Angelinux-slack”; docente en maestría en UPAV y fundador de la distribución Linux Falco que está en desarrollo para la Universidad Veracruzana. Además, ponente, organizador de congreso, laborista social, impartidor de cursos de programación y servidores Linux, webmaster, y ex invitado en programa de televisión.

4 Comentarios

Oscar S · 8 abril, 2010 a las 14:03

se que quizás no haya columna 700, pero …

qué pasa con entAcol(700);
?

😉

Angelinux Slack · 8 abril, 2010 a las 14:19

entAcol(700) da como resultado “ZY”.

saludos

Oscar S · 9 abril, 2010 a las 13:35

jaja que wey
era con 800 😉

Angelinux Slack · 9 abril, 2010 a las 16:57

Tienes razón, a partir del 702 debería marcar AAA, veré la forma de arreglarlo.

¡Muchas gracias!

Deja un comentario