Um zu demonstrieren, wie Workiva Scripting in Workiva funktioniert, haben wir ein einfaches Skript erstellt, das eine Zelle in einer Kalkulationstabelle aktualisiert. Sie können diese Schritte befolgen, um das Skript in Ihrem eigenen Arbeitsbereich zu replizieren.
Hinweis: Scripting ist derzeit nur über Customize Workiva verfügbar. Erfahren Sie mehr.
Anforderungen
- Workiva Scripting muss für Ihren Arbeitsbereich aktiviert sein. Erfahren Sie mehr über Workiva Scripting.
- Die Rolle Script Editor ist erforderlich, um Scripts zu erstellen oder zu bearbeiten.
- Sie müssen Abhängigkeiten generieren, um dieses Skript direkt aus einer Kalkulationstabelle heraus ausführen zu können. Dazu gehört die "requests"-Bibliothek, die für die Interaktion mit den Workiva Public APIs notwendig ist.
Erstellen Sie das Skript
Um das Skript in Ihrem Arbeitsbereich zu erstellen, gehen Sie folgendermaßen vor:
- Von der Startseite aus klicken Sie auf Erstellen => Skript.
- Geben Sie auf der rechten Seite einen Namen und eine kurze Beschreibung für das Skript ein.
- Gehen Sie in den Skript-Editor in der Mitte des Bildschirms und löschen Sie den vorhandenen Code. Kopieren Sie Folgendes und fügen Sie es ein:
import requests import json import os AUTH_URL = "https://api.app.wdesk.com/iam/v1/oauth2/token" SS_API_URL = 'https://api.app.wdesk.com/platform/v1/spreadsheets/' 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'} def getAuthToken(self): tokenRes = requests.post(AUTH_URL, data = 'client_id=' + CLIENT_ID + \ '&client_secret=' + CLIENT_SECRET + '&grant_type=client_credentials', \ headers = self._headers) tokenResponse = json.loads(tokenRes.text) return tokenResponse['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 = {'Authorization': self._accessToken} def getRawData(self): dataRes = requests.get(self._ssApiUrl, headers = self._headers) # print(dataRes) rawData = json.loads(dataRes.text) # todo handle pagination # print("---", rawData['data'][0]['values'][0]) return rawData['data'][0]['values'] def updateRange(self, sheetId, range, values): url = SS_API_URL + SPREADSHEET_ID + "/sheets/" + sheetId + "/values/" + \ range print("Update Range: ", url) print("Values: ", values) dataRes = requests.put(url, headers = self._headers, \ data=json.dumps(values)) def write_tier_data(ssApi: SSApi): values = [] values.append([HELLO_WORLD]) ssApi.updateRange(SHEET_ID, 'A1:ZZZZ99', {"values": values}) def main(): authToken = ApiAuth().getAuthToken() ssApi = SSApi(authToken) # rawData = ssApi.getRawData() write_tier_data(ssApi) print('Calling main') main() - Klicken Sie auf Speichern.
An diesem Punkt sollten Sie sicherstellen, dass Sie die notwendigen Abhängigkeiten für dieses Skript generiert haben.
Das Skript ausführen
So bearbeiten Sie das Skript manuell:
- Wenn das Skript geöffnet ist, klicken Sie in der Menüleiste am oberen Bildschirmrand auf Skript ausführen.
- Geben Sie die Parameter ein, die für den Zugriff auf die Tabellenkalkulations-API erforderlich sind, die IDs der Tabellenkalkulation und des Arbeitsblatts sowie den Textinhalt für die Zelle. Klicken Sie auf Script ausführen.
Hinweis: Die IDs sind in der URL des Arbeitsblatts zu finden: /spreadsheet/{spreadsheetId}/sheet/{sheetId}.
Überprüfen Sie die aktualisierte Zelle im Arbeitsblatt, um zu sehen, ob das Skript vollständig ist.
Führen Sie das Skript direkt aus einer Tabellenkalkulation aus
Dieses und ähnliche Skripte können auch direkt von einer Tabellenkalkulation aus mit Hilfe von automations ausgeführt werden.
Um dieses Skript mit Automatisierungen zu verwenden:
- Löschen Sie den bestehenden Code.
- Ersetzen Sie ihn durch diesen Code:
import requests import json import os AUTH_URL = "https://api.sandbox.wdesk.com/iam/v1/oauth2/token" SS_API_URL = 'https://api.sandbox.wdesk.com/platform/v1/spreadsheets/' # 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') CLIENT_ID = "" # Enter your client Id here CLIENT_SECRET = "" # Enter your client secret here DOCUMENT_ID = os.getenv('DOCUMENT_ID') INPUT_SHEET_ID = os.getenv('INPUT_SHEET_ID') INPUT_RESOURCE_ID = os.getenv('INPUT_RESOURCE_ID') def getSpreadsheetId(wurl): start = wurl.find("sheets_") if (start >= 0): return wurl[start + len("sheets_"):] return None def getSpreadsheetSectionId(sheetId, wurl): start = wurl.find("sheets_" + sheetId + "_") if (start >= 0): return wurl[start + len("sheets_" + sheetId + "_"):] return None SPREADSHEET_ID = getSpreadsheetId(INPUT_SHEET_ID) if SPREADSHEET_ID != None : SHEET_ID = getSpreadsheetSectionId(SPREADSHEET_ID, INPUT_RESOURCE_ID) HELLO_WORLD = "Holaaaaaaaaaa" class ApiAuth: def __init__(self): self._headers = {'Content-Type': \ 'application/x-www-form-urlencoded;charset=UTF-8'} def getAuthToken(self): tokenRes = requests.post(AUTH_URL, data = 'client_id=' + CLIENT_ID + \ '&client_secret=' + CLIENT_SECRET + '&grant_type=client_credentials', \ headers = self._headers) tokenResponse = json.loads(tokenRes.text) return tokenResponse['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 = {'Authorization': self._accessToken} def getRawData(self): dataRes = requests.get(self._ssApiUrl, headers = self._headers) # print(dataRes) rawData = json.loads(dataRes.text) # todo handle pagination # print("---", rawData['data'][0]['values'][0]) return rawData['data'][0]['values'] def updateRange(self, sheetId, range, values): url = SS_API_URL + SPREADSHEET_ID + "/sheets/" + sheetId + "/values/" + \ range print("Update Range: ", url) print("Values: ", values) dataRes = requests.put(url, headers = self._headers, \ data=json.dumps(values)) def write_tier_data(ssApi: SSApi): values = [] values.append([HELLO_WORLD]) ssApi.updateRange(SHEET_ID, 'A1:ZZZZ99', {"values": values}) def main(): authToken = ApiAuth().getAuthToken() ssApi = SSApi(authToken) # rawData = ssApi.getRawData() write_tier_data(ssApi) print('Calling main') main() - Rufen Sie diesen Artikel auf und befolgen Sie die Schritte, um das Skript von Ihrer Tabellenkalkulation aus auszuführen.