Para demostrar cómo funciona Workiva Scripting en Workiva, hemos creado un script sencillo que actualiza una celda de una hoja de cálculo. Puedes seguir estos pasos para reproducir el script en tu espacio de trabajo.
Nota: Actualmente, el script solo está disponible a través de Personalizar Workiva. Obtén más información.
Requisitos
- Workiva Scripting debe estar activado para tu espacio de trabajo. Más información: sobre Workiva Scripting.
- El rol Editor de scripts es necesario para crear o editar scripts.
- La concesión de la API utilizada en este ejemplo debe tener el ámbito «
file:write » y acceso a la hoja de cálculo de destino. Para obtener instrucciones, consulta la guía de configuración de la API de Workiva. - Debes generar dependencias para poder ejecutar este script directamente desde una hoja de cálculo. Esto incluirá la biblioteca «requests», necesaria para interactuar con las API públicas de Workiva .
Construye el script
Para crear el script en tu espacio de trabajo, sigue estos pasos:
- Desde: página principal, haz clic en Crear => Script.
- A la derecha, introduce un nombre y una breve descripción del script.
-
Ve al editor de scripts, situado en el centro de la pantalla, y borra cualquier código que haya. Copia y pega lo siguiente:
import os import time import requests AUTH_URL = "https://api.app.wdesk.com/oauth2/token" SS_API_URL = "https://api.app.wdesk.com/spreadsheets/" API_VERSION = "2026-01-01" REQUEST_TIMEOUT = 30 OPERATION_TIMEOUT = 120 CLIENT_ID = os.getenv("CLIENT_ID") CLIENT_SECRET = os.getenv("CLIENT_SECRET") SPREADSHEET_ID = os.getenv("SPREADSHEET_ID") SHEET_ID = os.getenv("SHEET_ID") HELLO_WORLD = os.getenv("HELLO_WORLD") class ApiAuth: def __init__(self): self._headers = { "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", "X-Version": API_VERSION, } def getAuthToken(self): tokenRes = requests.post( AUTH_URL, data={ "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET, "grant_type": "client_credentials", }, headers=self._headers, timeout=REQUEST_TIMEOUT, ) tokenRes.raise_for_status() return tokenRes.json()["access_token"] clase SSApi: def __init__(self, accessToken): self._accessToken = "Bearer " + accessToken self._ssApiUrl = ( SS_API_URL + SPREADSHEET_ID + "/sheets/" + SHEET_ID + "/values/A2:H" ) self._headers = { "Authorization": self._accessToken, "X-Version": API_VERSION, } def getRawData(self): dataRes = requests.get( self._ssApiUrl, headers=self._headers, timeout=REQUEST_TIMEOUT, ) dataRes.raise_for_status() rawData = dataRes.json() return rawData["data"][0]["values"] def waitForOperation(self, operationUrl): deadline = time.monotonic() + OPERATION_TIMEOUT while time.monotonic() < deadline: operationRes = requests.get( operationUrl, headers=self._headers, timeout=REQUEST_TIMEOUT, ) operationRes.raise_for_status() operation = operationRes.json() if operation["status"] == "completed": return if operation["status"] == "failed": raise RuntimeError( operation.get("failureReason", "Error al actualizar la hoja de cálculo") ) time.sleep(float(operationRes.headers.get("Retry-After", "2"))) raise TimeoutError("La actualización de la hoja de cálculo no se completó antes de que se agotara el tiempo de espera") def updateRange(self, sheetId, range, values): url = ( SS_API_URL + SPREADSHEET_ID + "/sheets/" + sheetId + "/values/" + range ) print("Rango de actualización:", url) print("Valores:", valores) dataRes = requests.put( url, headers=self._headers, json=valores, timeout=REQUEST_TIMEOUT, ) dataRes.raise_for_status() operationUrl = dataRes.headers.get("Location") if not operationUrl: operationUrl = dataRes.json().get("operationLocation") si no es operationUrl: raise RuntimeError("La actualización de la hoja de cálculo no ha devuelto una URL de operación") self.waitForOperation(operationUrl) def write_tier_data(ssApi): ssApi.updateRange(SHEET_ID, "A1", {"values": [[HELLO_WORLD]]}) def main(): authToken = ApiAuth().getAuthToken() ssApi = SSApi(authToken) write_tier_data(ssApi) print("Llamando a main") main() - Haz clic en Guardar.
En este punto, debes asegurarte de que has generado en las dependencias necesarias para este script.
Ejecuta el script.
Debes generar las dependencias antes de ejecutar este script. El paquete de dependencias incluye la biblioteca ` requests `, que se utiliza para llamar a las API públicas de Workiva.
- Con el script abierto, haz clic en Ejecutar Script en la barra de menús de la parte superior de la pantalla.
- Introduce los parámetros necesarios para acceder a la API de Hojas de Cálculo, los ID de hoja y de hoja de cálculo, y el contenido de texto de la celda. Haz clic en Ejecutar Script.
Nota: Los ID pueden encontrarse en la URL de la hoja de cálculo: /hoja de cálculo/{spreadsheetId}/hoja de cálculo/{sheetId}.
Para verificar que el script se ha completado, comprueba la celda actualizada en la hoja de cálculo.
Ejecuta el script directamente desde una hoja de cálculo.
Las automatizaciones de Workiva proporcionan las hojas de cálculo y los identificadores de hoja a través de variables de entorno, pero no transmiten entradas personalizadas en tiempo de ejecución. Para utilizar este script con una automatización, sustituye las declaraciones de «runtime-input» del script original. Restringe el acceso al script a los usuarios autorizados, ya que los usuarios con permisos de código fuente pueden ver los valores definidos en su código.
Reemplazar:
CLIENT_ID = os.getenv("CLIENT_ID") CLIENT_SECRET = os.getenv("CLIENT_SECRET") SPREADSHEET_ID = os.getenv("SPREADSHEET_ID") SHEET_ID = os.getenv("SHEET_ID") HELLO_WORLD = os.getenv("HELLO_WORLD")Con:
CLIENT_ID = "tu_id_de_cliente" CLIENT_SECRET = "tu_clave_secreta" SPREADSHEET_ID = os.getenv("INPUT_SPREADSHEET_ID") SHEET_ID = os.getenv("INPUT_SPREADSHEET_SHEET_ID") HELLO_WORLD = "Hola, mundo"- Sustituye los marcadores de posición de las credenciales y el valor de la celda por tus propios valores.
- Guarda el script.
- En el panel «Automatizaciones» de la hoja de cálculo, crea una automatización con un desencadenante de «Ejecución manual» .
- Añade una acción « » (Ejecutar script) y selecciona este script.
- Guarda y ejecuta la automatización.
Para obtener más información, consulta . Ejecutar scripts con automatizaciones: .