Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

206
Vistas
Conversión de nombre de columna de número a Excel

En Excel, los nombres de las columnas son caracteres de la A a la Z, si se necesitan más columnas, continúa con AA, AB ...

Quiero escribir una función que convierta números enteros en esos nombres de columna de Excel.

 0 .... A 25 ... Z 26 ... AA

La solución que se me ocurrió es trabajar hasta AZ , pero quiero que funcione más.

 function indexToXlxsColumn($index, $prefix="") { if($index < 26) { return $prefix.chr($index+65); }else{ return indexToXlxsColumn($index % 26, "A"); } }

¿Cómo adaptar esta función para que funcione para cada índice sin producir código de espagueti ?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Aquí está el problema

 return indexToXlxsColumn($index % 26, "A");

Si establece el prefijo del siguiente piso en A, ¿qué sucede cuando tiene una entrada = 53? El resultado debería ser "BB".

código en papel

 function indexToXlxsColumn($index, $prefix="") { if($index < 26) // 53 isnt less then 26 // second loop , 1 is less then 26 { return $prefix.chr($index+65); // $prefix = A // chr($index+65) = B // return "A"."B" ; }else{ return indexToXlxsColumn($index % 26, "A"); // indexToXlxsColumn(53 % 26, "A") -> (1, "A") } }

---ACTUALIZAR---

Sigue el ask aqui esta la respuesta

 function indexToXlxsColumn($index, $suffix ="") { if($index < 26){ return chr($index+65).$suffix ; } return indexToXlxsColumn(($index - $index%26)/26-1, chr($index%26+65).$suffix ); }
over 4 years ago · Santiago Trujillo Denunciar

0

Yo lo haría un poco diferente. Me molestó trabajar con chr(). Entonces, una vez almacené el alfabeto en una cadena y lo iteré hasta que el índice se resolvió con éxito.

máximo "zz"

 <?php function getIn($i) { $str = 'abcdefghijklmnopqrstuvwxyz'; $r = (int) floor($i / 26) ; $c = $i % 26; return ($r) < 1 ? $str[$c] : $str[$r-1] . $str[$c]; } echo getIn(52); // output: "ba"

Actualizar con max "zzz"

 function getIn($i) { $str = 'abcdefghijklmnopqrstuvwxyz'; $r = (int) floor($i / 26); $rr = $r >= 27 ? $r - 27 : null; $c = $i % 26; if ( $rr !== null) { return $str[$c] : $str[$r-1] . $str[$c]; } return ($r) < 1 ? $str[$c] : $str[$r-1] . $str[$c]; } echo getIn(800); // ddu echo getIn(1377); // zzz
over 4 years ago · Santiago Trujillo Denunciar

0

Una de las implementaciones:

 function indexToXlxsColumn($index) { $name = ''; while($index > 0) { $mod = ($index - 1) % 26; $name = chr(65 + $mod).$name; $index = (int)(($index - $mod) / 26); } return $name; } // echo indexToXlxsColumn(26); // Z echo indexToXlxsColumn(33); // AG // echo indexToXlxsColumn(800); // ADT
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda