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