為了展示 Workiva Scripting 如何在 Workiva 中運作,我們建立了一個簡單的腳本來更新電子表格中的一個單元格。您可以按照以下步驟在自己的工作區中複製該腳本。
註 :目前僅可透過自訂 Workiva 使用腳本。深入了解。
必要條件
- 您的工作區必須啟用 Workiva Scripting。進一步了解 Workiva Scripting。
- Script Editor 角色需要用於創建或編輯腳本。
- 此範例使用的 API 授與必須具有
file:write範圍和對目標試算表的存取權。有關說明,請參閱 Workiva API 設定。 - 您必須產生相依性 ,才能直接從試算表執行此指令碼。這將包括與 Workiva Public API互動所需的「要求」程式庫。
建立腳本
若要在工作區中建立指令碼,請遵循下列步驟:
- 從「首頁」,按一下+ 建立 => 腳本 。
- 在右側輸入指令碼的名稱和簡短說明。
-
前往畫面中央的指令碼編輯器,刪除任何現有程式碼。複製並貼上下列內容:
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-urlencode;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 = { "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() returnrawData["data"][0]["values"]def waitForOperation(self, OperationUrl):deadline = time.monoonic( ) + OPERATION_TIMEOUT 而time.monoonic() <deadline:operationRes =requests.get(operationUrl, headers=self._headers, timeout=REQUEST_TIMEOUT, ) OperationRes.raise_for_status() Operation = OperationRes.json() if Operation["status"] == "已完成": return if Operation["status"] == "failed":引發 RuntimeError( Operation.get("failureReason", "試算表更新失敗")) time.sleep(float(operationRes.headers.get( "Retry-After", "2")))引發 TimeoutError("試算表更新未在超時前完成")def updateRange(self, sheetId,range, values): url = (SS_API_URL + SPREADSHEET_ID + "/sheets/" + sheetId + "/va lues/" +range ) print("更新範圍:",url)print("值:",值)dataRes =requests.put(url,headers=self._headers,json=values,timeout=request_timeout,)datares. raise_for_status() OperationUrl = dataRes.headers.get("Location") if not個= SSApi(authToken)write_tier_data(ssApi)print("正在呼叫 main") main() - 按一下「儲存」。
此時,您應該確保已經為此指令碼產生必要的相依性 。
執行腳本
您必須在執行此指令碼前,產生相依性。相依性套件包含用於呼叫 Workiva Public API 的個要求程式庫。
- 開啟指令碼後,按一下螢幕上方功能表列中的Run Script 。
- 輸入存取 Spreadsheets API 所需的參數、試算表和工作表 ID,以及儲存格的文字內容。按一下執行指令碼 。
注意: ID 可在電子表格的 URL 中找到:/spreadsheet/{spreadsheetId}/sheet/{sheetId} 。
若要驗證腳本是否完成,請檢查電子表格中已更新的儲存格。
直接從試算表執行指令碼
Workiva 自動化透過環境變數提供試算表和工作表 ID,但不會傳遞自訂的執行階段輸入。若要自動化使用此指令碼,請取代原始指令碼中的執行階段輸入宣告。限制授權使用者對指令碼的存取權,因為具有來源權限的使用者可以檢視在其代碼中定義的值。
取代:
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 = "your_client_id" CLIENT_SECRET = "your_client_secret" SPREADSHEET_ID = os.getenv("INPUT_SPREADSHEET_ID") SHEET_ID = os.getenv("INPUT_SPREADSHEET_SHEET_ID") HELLO_WORLD = "Hello World"- 用您的值取代認證預留位置和儲存格值。
- 儲存指令碼。
- 在試算表的「自動化」面板中,使用 手動執行 觸發程序建立自動化。
- 新增 執行指令碼 動作並選取此指令碼。
- 儲存並執行自動化。
若要進一步了解,請參閱 使用自動化執行指令碼 。