Aby pokazać jak działa skryptowanie Workiva w Workiva, stworzyliśmy prosty skrypt, który aktualizuje komórkę w arkuszu kalkulacyjnym. Aby odtworzyć skrypt we własnym obszarze roboczym, możesz wykonać poniższe kroki.
Uwaga : Skrypty są obecnie dostępne tylko poprzez Dostosowywanie Workiva. Dowiedz się więcej.
Wymagania
- W Twojej przestrzeni roboczej musi być włączona funkcja Workiva Scripting. Dowiedz się więcej o skryptach Workiva.
- Rola Edytora skryptów jest wymagana do tworzenia i edytowania skryptów.
- Przyznane API użyte w tym przykładzie musi mieć zakres
file:write i dostęp do arkusza kalkulacyjnego docelowego. Instrukcje znajdziesz w dokumencie Konfiguracja interfejsu API Workiva. - Aby uruchomić ten skrypt bezpośrednio z arkusza kalkulacyjnego, musisz wygenerować zależności . Będzie to obejmować bibliotekę „requests” niezbędną do interakcji z publicznymi interfejsami API Workiva .
Zbuduj skrypt
Aby utworzyć skrypt w swojej przestrzeni roboczej, wykonaj następujące kroki:
- Z poziomu ekranu głównego kliknij + Utwórz => Skrypt .
- Po prawej stronie wpisz nazwę i krótki opis skryptu.
-
Przejdź do edytora skryptów na środku ekranu i usuń cały istniejący kod. Skopiuj i wklej następujące informacje:
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"] class SSApi: def __init__(self, accessToken): self._accessToken = "Bearer " + accessToken self._ssApiUrl = ( SS_API_URL + SPREADSHEET_ID + "/sheets/" + SHEET_ID + "/values/A2:H" ) self._headers = { "Autoryzacja": self._accessToken, "Wersja X": WERSJA_API, } 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"] == "zakończono": zwróć jeśli operation["status"] == "nie powiodło się": podnieś RuntimeError( operation.get("failureReason", "Aktualizacja arkusza kalkulacyjnego nie powiodła się") ) time.sleep(float(operationRes.headers.get("Ponów próbę", "2"))) podnieś TimeoutError("Aktualizacja arkusza kalkulacyjnego nie zakończyła się przed upływem limitu czasu") def updateRange(self, sheetId, range, values): url = ( SS_API_URL + SPREADSHEET_ID + "/sheets/" + sheetId + "/values/" + range ) print("Aktualizuj zakres:", url) print("Wartości:", values) dataRes = requests.put( url, headers=self._headers, json=values, timeout=REQUEST_TIMEOUT, ) dataRes.raise_for_status() operationUrl = dataRes.headers.get("Location") jeśli nie operationUrl: operationUrl = dataRes.json().get("operationLocation") jeśli nie operationUrl: podnieś RuntimeError("Aktualizacja arkusza kalkulacyjnego nie zwróciła adresu URL operacji") 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("Wywołanie main") main() - Kliknij Zapisz.
W tym momencie powinieneś mieć pewność, że wygenerowałeś niezbędne zależności dla tego skryptu.
Uruchom skrypt
Przed uruchomieniem tego skryptu musisz wygenerować zależności. Pakiet zależności obejmuje bibliotekę requests służącą do wywoływania publicznych interfejsów API Workiva.
- Po otwarciu skryptu kliknij Uruchom skrypt na pasku menu u góry ekranu.
- Wprowadź parametry potrzebne do uzyskania dostępu do interfejsu API Arkuszy kalkulacyjnych, identyfikatory arkusza kalkulacyjnego i arkusza oraz zawartość tekstową komórki. Kliknij Uruchom skrypt .
Uwaga : Identyfikatory można znaleźć w adresie URL arkusza kalkulacyjnego: /spreadsheet/ {spreadsheetId} /sheet/ {sheetId} .
Aby sprawdzić, czy skrypt został ukończony, sprawdź zaktualizowaną komórkę w arkuszu kalkulacyjnym.
Uruchom skrypt bezpośrednio z arkusza kalkulacyjnego
Automatyzacje Workiva dostarczają arkusze kalkulacyjne i identyfikatory arkuszy za pośrednictwem zmiennych środowiskowych, ale nie przekazują niestandardowych danych wejściowych środowiska wykonawczego. Aby użyć tego skryptu z automatyzacją, zastąp deklaracje wejściowe środowiska wykonawczego w oryginalnym skrypcie. Ogranicz dostęp do skryptu do autoryzowanych użytkowników, ponieważ to użytkownicy z uprawnieniami do źródła mogą przeglądać wartości zdefiniowane w jego kodzie.
Zastępować:
ID_KLIENTA = os.getenv("ID_KLIENTA") TAJNE_KLIENTA = os.getenv("TAJNE_KLIENTA") ID_ARKUSZY_KALACYJNYCH = os.getenv("ID_ARKUSZY_KALACYJNYCH") ID_ARKUSZY_KALACYJNYCH = os.getenv("ID_ARKUSZY_KALACYJNYCH") WITAMY_ŚWIECIE = os.getenv("WITAMY_ŚWIECIE")Z:
CLIENT_ID = "twój_id_klienta" CLIENT_SECRET = "twój_tajny_hasło_klienta" SPREADSHEET_ID = os.getenv("ID_ARKUSZY_WEJŚCIOWYCH") SHEET_ID = os.getenv("ID_ARKUSZY_WEJŚCIOWYCH_ARKUSZY_WEJŚCIOWYCH") HELLO_WORLD = "Witaj świecie"- Zastąp symbole zastępcze poświadczeń i wartości komórek własnymi wartościami.
- Zapisz skrypt.
- W panelu Automatyzacje arkusza kalkulacyjnego utwórz automatyzację z wyzwalaczem Wykonanie ręczne .
- Dodaj akcję Wykonaj skrypt i wybierz ten skrypt.
- Zapisz i uruchom automatyzację.
Aby dowiedzieć się więcej, zobacz Wykonywanie skryptów za pomocą automatyzacji .