För att visa hur Workiva Scripting fungerar i Workiva har vi byggt ett enkelt skript som uppdaterar en cell i ett kalkylark. Du kan följa dessa steg för att replikera skriptet i din egen arbetsyta.
Obs : Skript är för närvarande endast tillgängligt via Anpassa Workiva. Läs mer.
Krav
- Workiva Scripting måste vara aktiverat för din arbetsyta. Läs mer om Workiva Scripting.
- Rollen Skriptredigerare krävs för att skapa eller redigera manus.
- API-tillståndet som används i det här exemplet måste ha
file:write- omfånget och åtkomst till målkalkylbladet. För instruktioner, se Workiva API-konfiguration. - Du måste generera beroenden för att kunna köra det här skriptet direkt från ett kalkylblad. Detta kommer att inkludera biblioteket "förfrågningar" som är nödvändigt för att interagera med Workivas offentliga API:er .
Skapa skriptet
Följ dessa steg för att bygga skriptet i din arbetsyta:
- Från startsidan, klicka på + Skapa => Skript .
- På höger sida anger du ett namn och en kort beskrivning för skriptet.
-
Gå till skriptredigeraren mitt på skärmen och radera all befintlig kod. Kopiera och klistra in följande:
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 = { "Innehållstyp": Behöver du en specifik attribution? "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"]class SSApi: def __init__(self, accessToken): self._accessToken = "Bärare" + accessToken self._ssApiUrl = ( SS_API_URL + SPREADSHEET_ID + "/sheets/" + SHEET_ID + "/values/A2:H" ) self._headers = { "Auktorisering": 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"]== "slutförd": return if operation ["status"]== "misslyckades": raise RuntimeError( operation.get("failureReason", "Kalkylbladsuppdatering misslyckades") ) time.sleep(float(operationRes.headers.get("Försök igen", "2"))) raise TimeoutError("Kalkylbladsuppdateringen slutfördes inte före timeout") def updateRange(self, sheetId, range, values): url = ( SS_API_URL + SPREADSHEET_ID + "/sheets/" + sheetId + "/values/" + range ) print("Uppdateringsintervall:", url) print("Värden:", values) dataRes = requests.put( url, headers=self._headers, json=values, timeout=REQUEST_TIMEOUT, ) dataRes.raise_for_status() operationUrl = dataRes.headers.get("Plats") if not operationUrl: operationUrl = dataRes.json().get("operationLocation") if not operationUrl: raise RuntimeError("Kalkylbladsuppdateringen returnerade ingen operations-URL") 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("Anropar main") main() - Klicka på Spara .
Vid det här laget bör du se till att du har genererat de nödvändiga beroenden för det här skriptet.
Kör skriptet
Du måste generera beroenden innan du kör det här skriptet. Beroendepaketet innehåller förfrågningsbiblioteket som används för att anropa Workiva Public API:er.
- Med skriptet öppet klickar du på Kör skript i menyraden högst upp på skärmen.
- Ange de parametrar som behövs för åtkomst till API:et för kalkylark, ID för kalkylark och ark samt textinnehållet för cellen. Klicka på Kör skript .
Obs! ID:na finns i kalkylarkets URL: /kalkylblad/ {kalkylblads-ID} /ark/ {ark-ID} .
För att verifiera att skriptet slutförs, kontrollera den uppdaterade cellen i kalkylbladet.
Kör skriptet direkt från ett kalkylark
Workiva-automatiseringar tillhandahåller kalkylblads- och ark-ID:n via miljövariabler men skickar inte anpassade körtidsindata. För att använda det här skriptet med en automatisering, ersätt runtime-input-deklarationerna i det ursprungliga skriptet. Begränsa åtkomsten till skriptet till behöriga användare eftersom användare med källbehörigheter kan se de värden som definieras i dess kod.
Ersätta:
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")Med:
CLIENT_ID = "ditt_klient_id" CLIENT_SECRET = "din_klient_hemlighet" SPREADSHEET_ID = os.getenv("INPUT_SPREADSHEET_ID") SHEET_ID = os.getenv("INPUT_SPREADSHEET_SHEET_ID") HELLO_WORLD = "Hej världen"- Ersätt platshållarna för autentiseringsuppgifterna och cellvärdet med dina värden.
- Spara skriptet.
- I kalkylbladets automatiseringspanel skapar du en automatisering med en manuell körningsutlösare.
- Lägg till en åtgärd för att köra skript och välj det här skriptet.
- Spara och kör automatiseringen.