Crear una tabla automáticamente cuando no sabes cuántas filas vienen (Office Scripts)
Un miembro de la comunidad llegó con un reto poco habitual: necesitaba un script para Excel en la web que convirtiera un rango en tabla sin saber de antemano cuántas filas iban a entrar. Las columnas eran siempre las mismas, pero las filas podían ser 3 o 30. Y como era Excel online, no valía una macro de VBA: tenía que ser con Office Scripts.
La comunidad ofreció varios caminos.
La vía clásica con macros (VBA). Hector recordó que, si en lugar de un rango normal se usan tablas (ListObjects), el problema desaparece de raíz: una tabla crece automáticamente al añadir filas o columnas, así que no hace falta calcular dónde terminan los datos. El inconveniente es que esto no funciona en la versión web, que es justo donde estaba el problema.
El enfoque con Office Scripts contando el rango usado. Leo propuso un script que parte de una celda fija (por ejemplo B5), lee el rango usado de la hoja con getUsedRange, calcula la última fila y la última columna, construye el rango con getRangeByIndexes y lo convierte en tabla con addTable:
``
function main(workbook: ExcelScript.Workbook) {
const hoja = workbook.getActiveWorksheet();
const rangoUsado = hoja.getUsedRange();
const ultimaFila = rangoUsado.getRowIndex() + rangoUsado.getRowCount() - 1;
const ultimaColumna = rangoUsado.getColumnIndex() + rangoUsado.getColumnCount() - 1;
// B5 = fila 4, columna 1 (índices base 0)
const filaInicio = 4;
const columnaInicio = 1;
const numFilas = ultimaFila - filaInicio + 1;
const numColumnas = ultimaColumna - columnaInicio + 1;
const rangoTabla = hoja.getRangeByIndexes(filaInicio, columnaInicio, numFilas, numColumnas);
workbook.addTable(rangoTabla, true);
}
`
La versión elegante en cuatro líneas. Acto seguido, Leo enseñó un atajo mucho más limpio: si los datos forman un bloque contiguo a partir de una celda, getSurroundingRegion detecta solo ese bloque sin necesidad de calcular nada:
`
function main(workbook: ExcelScript.Workbook) {
const hoja = workbook.getActiveWorksheet();
const rangoTabla = hoja.getRange("B5").getSurroundingRegion();
workbook.addTable(rangoTabla, true);
}
`
Con esa pista, el autor terminó de pulir su propio script (una variante que recorre el rango usado a partir de A1 con un número de columnas configurable) y confirmó que funcionaba: "Lo hizo! Está probado ya".
La conclusión es práctica: cuando el número de filas es variable, no hace falta medir nada a mano. En escritorio, una tabla (ListObject) crece sola; en la web, getSurroundingRegion` hace ese mismo trabajo de detectar el bloque de datos en una sola línea.
Más contenido de Excel en InflueXcel
- Cuenta clientes y cervezas en Excel 🍺 Caso "La Taberna: El Poney Pisador" (Nivel 1) Tutorial🍺 Noche cerrada en Bree. Frodo, Sam, Merry y Pippin cruzan la puerta de El Poney Pisador huyendo de los Jinetes Negros: la sala está a reven
- SUMAR.SI.CONJUNTO en acción con El Señor de los Anillos 🃏 El 21 de La Comarca TutorialLo que practicamos en este caso: • Contar cartas por palo con CONTAR.SI • Sumar valores con condiciones (SUMAR.SI / SUMAR.SI.CONJUNTO) • Apl
- Reto de Excel: El cumpleaños de Bilbo 🎂 | CONTAR.SI y SUMAR.SI desde cero (Nivel 1) TutorialEn La Comarca se celebra el cumpleaños número 111 de Bilbo Bolsón: cerveza, pasteles, fuegos artificiales… y algún curioso escondido tras el
- ¡Excel PowerQuery Hack! Conexiones con rutas relativas en 10 minutos! Tutorial¿Harto de ajustar las conexiones en PowerQuery cada vez que compartes tu archivo de Excel? 🙄 Convierte las conexiones de PowerQuery con ruta
- Mejora un 90% el rendimiento de Power Query con SQLite TutorialPower Query es una herramienta potente para consolidar, combinar y calcular datos, pero cuando trabajamos con millones de registros y calcul
- Reorganizar tablas mensuales: cruzar por persona buscando en vertical y en horizontal CasoNuevo caso interesante de la comunidad. Juan tenía varias tablas mensuales (a veces más de una en el mismo mes) y quería reorganizarlas por
- Un dato de todas las hojas, escrito una sola vez CasoEsta semana surgió en la comunidad un reto muy habitual cuando un libro tiene muchas hojas: mostrar el valor de la celda B3 de cada hoja, in
- Un índice de hojas que se genera solo: HYPERLINK en rangos desbordados CasoEsta semana surgió en la comunidad un pequeño "expediente X". Un miembro llegó tras ver un vídeo con una idea clara en la cabeza: montar una
- Reformatear un código alfanumérico al teclear: de NN1234567 a NN-12345-67 CasoEsta semana surgió en la comunidad una duda muy práctica: cómo conseguir que al escribir un código tipo NN1234567 (dos letras seguidas de si
- Reclasificación contable: duplicar cada fila con una conversión distinta por columna, en un único bloque CasoInteresante reto contable planteado esta semana por un miembro de la comunidad. Juan parte de una tabla de apuntes contables (rango C7:P10)