Aby zademonstrować działanie skryptów w Workiva, stworzyliśmy prosty skrypt, który aktualizuje komórkę w arkuszu kalkulacyjnym. Możesz wykonać poniższe kroki, aby powielić skrypt we własnym obszarze roboczym.
Uwaga: Skrypty są obecnie dostępne tylko poprzez Customize Workiva. Dowiedz się więcej.
Wymagania
- Skrypty Workiva muszą być włączone dla Twojej przestrzeni roboczej. Dowiedz się więcej o Workiva Scripting.
- Rola Script Editor jest wymagana do tworzenia lub edytowania skryptów.
- Aby uruchomić ten skrypt bezpośrednio z arkusza kalkulacyjnego, musisz wygenerować zależności . Obejmuje to bibliotekę "żądań" niezbędną do interakcji z publicznymi interfejsami API Workiva.
Utwórz skrypt
Aby utworzyć skrypt w obszarze roboczym, wykonaj następujące kroki:
- Na stronie głównej kliknij + Create => Script.
- Po prawej stronie wprowadź nazwę i krótki opis skryptu.
- Przejdź do edytora skryptów na środku ekranu i usuń istniejący kod. Skopiuj i wklej następujące dane:
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('Wywołanie main') main() - Kliknij Zapisz.
W tym momencie powinieneś upewnić się, że wygenerowałeś niezbędne zależności dla tego skryptu.
Uruchom skrypt
Aby ręcznie uruchomić skrypt:
- Po otwarciu skryptu kliknij przycisk Uruchom skrypt na pasku menu w górnej części ekranu.
- Wprowadź parametry potrzebne do uzyskania dostępu do interfejsu API Spreadsheets, 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
Skrypt ten i inne podobne mogą być również uruchamiane bezpośrednio z arkusza kalkulacyjnego za pomocą automatyzacji .
Aby użyć tego skryptu z automatyzacją:
- Usuń istniejący kod.
- Zastąp go tym kodem:
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 = "" # Wpisz tutaj identyfikator klienta CLIENT_SECRET = "" # Wpisz tutaj sekret klienta 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('Wywołanie main') main() - Wejdź na stronę ten artykuł i postępuj zgodnie z instrukcjami, aby uruchomić skrypt z arkusza kalkulacyjnego.