6 min de lecturaIngeniería

Cómo acortar URLs en Excel: cuatro rutas que funcionan

La fórmula WEBSERVICE de Excel no puede hacer POST, así que para acortar enlaces necesitas Office Scripts, Power Automate o una importación masiva. Qué ruta encaja con la frecuencia de ejecución de tu hoja.

Marius Voß
DevRel · edge infra
Cómo acortar URLs en Excel: la fórmula WEBSERVICE limitada a solicitudes GET junto a las rutas de Office Scripts y Power Automate que pueden hacer POST

Excel no puede acortar una URL con una fórmula. WEBSERVICE envía una solicitud GET sin cabeceras ni cuerpo, y una API moderna de acortamiento necesita un POST con una cabecera Authorization y JSON. Además, solo funciona en Windows. Todos los tutoriales basados en fórmulas que encuentres usan un servicio que aceptaba la URL larga como parámetro de consulta, y esos servicios han desaparecido.

La pregunta real es cuál de las tres rutas que funcionan encaja con tu hoja: un Office Script, un flujo de Power Automate o una importación masiva con copiar y pegar. La respuesta depende casi por completo de la frecuencia con la que tenga que ejecutarse la hoja.

Cuatro formas de introducir enlaces cortos en una hoja de Excel y el límite de cada una: la fórmula WEBSERVICE, Office Scripts, una acción HTTP de Power Automate y una importación masiva

Ruta uno: un Office Script

Office Scripts ejecuta TypeScript contra el libro y puede llamar a una API externa con fetch. Esta es la ruta para una hoja que abres y ejecutas manualmente.

async function main(workbook: ExcelScript.Workbook) {
  const sheet = workbook.getActiveWorksheet();
  const rows = sheet.getUsedRange().getValues();

  for (let i = 1; i < rows.length; i++) {
    const destination = String(rows[i][0]);
    if (!destination || rows[i][1]) continue; // skip blanks and already-done rows

    const response = await fetch("https://api.elido.app/v1/links", {
      method: "POST",
      headers: {
        Authorization:
          "Bearer " + workbook.getWorksheet("Config").getRange("B1").getText(),
        "Content-Type": "application/json",
        "Idempotency-Key": destination, // stable per row, so a re-run creates nothing
      },
      body: JSON.stringify({ destination_url: destination }),
    });

    const link = (await response.json()) as { short_url: string };
    sheet.getCell(i, 1).setValue(link.short_url);
  }
}

Hay tres limitaciones importantes, en este orden.

La principal: las llamadas fetch externas funcionan cuando el script se ejecuta en Excel y no cuando Power Automate lo ejecuta. Un script que funciona perfectamente desde la pestaña Automate falla con fetch is not defined en cuanto un flujo lo activa, y esa sorpresa le ha costado una tarde entera a mucha gente.

No hay almacenamiento de secretos ni flujo OAuth, así que la clave queda en el script o en una celda. Leerla de una hoja Config, como arriba, es ligeramente mejor porque puedes compartir el script sin la clave, pero el propio libro se convierte en una credencial.

Además, la API de destino debe permitir la llamada desde el origen del script. La documentación de Office Scripts establece un requisito de CORS para los recursos externos, que la mayoría de las API públicas cumplen y algunas internas no.

La línea if (rows[i][1]) continue es lo que hace que el script sea seguro de ejecutar dos veces: omite las filas que ya tienen un enlace corto y la clave de idempotencia cubre las demás.

Ruta dos: un flujo de Power Automate

Para cualquier tarea programada, un flujo es la respuesta adecuada, porque se ejecuta tanto si alguien tiene el libro abierto como si no.

La estructura es la siguiente: un desencadenador de recurrencia o de archivo, List rows present in a table del conector de Excel, un apply-to-each con la acción HTTP que hace POST al endpoint de enlaces y, después, Update a row para escribir el enlace corto.

Antes de crearlo debes saber dos cosas. La acción HTTP genérica es un conector premium, así que esta ruta depende de tu licencia y no de tus conocimientos. Además, el flujo puede guardar la clave de API en una entrada segura o extraerla de Azure Key Vault, lo que supone una mejora real frente a la ruta de Office Script: la credencial deja de vivir en un archivo que la gente se envía por correo.

Si el flujo va a procesar cientos de filas, añade un límite de concurrencia al apply-to-each. La distribución simultánea predeterminada es lo bastante generosa como para activar el límite de velocidad de una API, y la solución es un ajuste, no un rediseño.

Ruta tres: exportar, importar masivamente y volver a pegar

Intento de acortar enlaces con una fórmula de Excel frente a una canalización con script, con el contraste entre WEBSERVICE limitado a GET y un POST real con cabeceras e idempotencia

Para una tarea puntual, esta opción gana a las dos anteriores en tiempo hasta terminar. Exporta la columna de destinos a CSV, pásala por la importación masiva del acortador, descarga el resultado y pega los enlaces cortos junto a los originales.

No necesitas un conector premium, no dejas una clave en un libro y no tienes que mantener un script. La guía de importación masiva de Google Sheets explica el formato del archivo, que es el mismo independientemente de la hoja de cálculo que lo haya generado, y la generación masiva de códigos QR cubre la variante en la que cada fila también necesita un código imprimible.

La regla para decidir es sencilla. Una vez es copiar y pegar. Cada lunes es un flujo. Cada vez que alguien abre el libro es un Office Script.

¿Quieres probar primero la ruta de copiar y pegar? Crea una cuenta en el plan gratuito, importa un CSV de cinco filas y comprueba si realmente merece la pena crear la automatización.

Por qué una fórmula seguiría siendo una mala opción

Supón que WEBSERVICE pudiera hacer POST. Seguiría siendo la herramienta equivocada, porque las fórmulas se recalculan según el calendario de Excel y no según el tuyo. Abres el libro y todas las filas vuelven a enviar su solicitud. Sin una clave de idempotencia, eso crea un enlace duplicado por fila cada vez que lo abres; con una clave, solo es una ráfaga de tráfico inútil que consume tu límite de velocidad.

Cualquier cosa que cree un recurso pertenece a un código que se ejecuta cuando tú lo indicas, no a una celda que se recalcula cuando a la aplicación le apetece. Conviene interiorizarlo más allá de este caso: es la misma razón por la que tanta gente tiene problemas al poner RAND() o NOW() en una hoja que alimenta un informe.

Devolver el resultado a la hoja

Elijas la ruta que elijas, escribe cuatro columnas, no dos: la URL original, el enlace corto, el slug y un estado o mensaje de error. Así, una ejecución que se quedó a medias resulta evidente y se puede repetir, en lugar de dejar una columna con huecos silenciosos.

Conserva el archivo. Cuando dentro de tres meses alguien pregunte qué enlace se incluyó en qué envío, la hoja tendrá la respuesta, y reconstruirla desde el panel dará más trabajo que conservarla. Si necesitas datos de clics junto a los mismos enlaces, cómo hacer seguimiento de los clics de un enlace cubre la parte de exportación.

Lee la serie principal

Este artículo forma parte del clúster de ingeniería. Empieza por la guía de la API de acortamiento de URL gratuita para conocer la estructura de la solicitud y sigue con límites de velocidad e idempotencia para trabajar correctamente en un bucle. Para la versión en PowerShell de la misma tarea con CSV, consulta cómo acortar una URL en PowerShell.

Relacionado en el blog

Preguntas frecuentes

¿Puedo acortar una URL con una fórmula de Excel?

No con una API moderna de acortamiento. WEBSERVICE envía una solicitud GET sin cabeceras, por lo que no puede autenticarse ni enviar un cuerpo JSON, y solo funciona en Windows. Cualquier tutorial que muestre un acortador basado en fórmulas usa un servicio antiguo que aceptaba la URL larga como parámetro de consulta. Esos servicios ya no existen.

Entonces, ¿cómo acorto URLs en Excel?

Hay tres rutas que funcionan: un Office Script con fetch para una ejecución puntual dentro de la aplicación, un flujo de Power Automate con la acción HTTP para cualquier tarea programada, o exportar la columna a CSV y usar una importación masiva. Elige según la frecuencia con la que tenga que ejecutarse la hoja, no según lo ingeniosa que parezca la opción.

¿Por qué falla fetch en mi Office Script cuando Power Automate lo ejecuta?

Porque las llamadas fetch externas no están disponibles en el entorno de ejecución de Power Automate, solo cuando el script se ejecuta en el propio Excel. El script que funciona desde la pestaña Automate de la aplicación falla con fetch is not defined en cuanto un flujo lo activa, y esa es la sorpresa más habitual en este caso.

¿Admite Office Scripts OAuth o almacenamiento de secretos?

No. No hay flujo de inicio de sesión ni almacén de secretos, así que tienes que dejar una clave escrita en el script o leerla de una celda. Trata cualquier libro que contenga ese script como una credencial: no lo compartas ampliamente y usa una clave limitada a la creación de enlaces.

¿Cómo evito crear enlaces duplicados cada vez que la hoja se recalcula?

Envía una clave de idempotencia derivada de la URL de destino, para que una solicitud repetida devuelva el enlace existente en lugar de crear uno nuevo. Por eso una fórmula sería una herramienta equivocada aunque pudiera hacer POST: las fórmulas se recalculan según su propio calendario y crearían enlaces cada vez.

¿Cuál es la forma más rápida de acortar unos cientos de filas una sola vez?

Exporta la columna a CSV y usa la importación masiva del acortador; después, pega los enlaces cortos devueltos junto a los originales. No necesitas código ni un conector premium, y solo lleva un par de minutos. Automatiza la tarea únicamente cuando se repita con una programación.

Prueba Elido

Pega una URL, obtén un enlace corto

Sin registro. El enlace vive 30 días. Crea una cuenta para conservarlo.

Gratis, sin registro · 2 por día

Prueba Elido

Acortador de URL alojado en la UE: dominios personalizados, análisis profundo y API abierta. Plan gratuito - sin tarjeta de crédito.

Etiquetas
how to shorten urls in excel
excel url shortener
webservice function excel
office scripts fetch api
power automate http request
bulk shorten urls spreadsheet

Seguir leyendo