WorkivaスクリプトがWorkivaでどのように機能するかを示すために、スプレッドシートのセルを更新する簡単なスクリプトを作成しました。以下のステップに従って、自分のワークスペースでスクリプトを複製することができます。
注: スクリプトは現在カスタマイズWorkivaからのみ利用可能です。詳細はこちら。
要件
- ワークスペースで Workiva スクリプトを有効にする必要があります。Workivaスクリプトの詳細はこちら。
- スクリプトを作成または編集するには、スクリプト編集者 の役割が必要です。
- この例で使用されるAPIグラントには、
ファイル:writeのスコープと、対象のスプレッドシートへのアクセス権が必要です。手順については、「Workiva API の設定」を参照してください。 - このスクリプトをスプレッドシートから直接実行するには、依存先の生成 が必要である。これには、のWorkivaパブリックAPI( )と連携するために必要な「requests」ライブラリが含まれます。
スクリプトをビルドする
ワークスペースでスクリプトを構築するには、以下のステップに従います:
- ホームから+ 作成 => スクリプト をクリックする。
- 右側に、スクリプトの名称と簡単な説明を入力します。
-
画面中央にあるスクリプトエディタを開き、既存のコードをすべて削除してください。以下をコピーし貼り付けます:
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 = { "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() 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"] == "completed": return if operation["status"] == "failed": raise RuntimeError( operation.get("failureReason", "スプレッドシートの更新に失敗しました") ) time.sleep(float(operationRes.headers.get("Retry-After", "2"))) raise TimeoutError("タイムアウト前にスプレッドシートの更新が完了しませんでした") def updateRange(self, sheetId, range, values): url = ( SS_API_URL + SPREADSHEET_ID + "/sheets/" + sheetId + "/values/" + range ) print("更新範囲:", url) print("値:", values) dataRes = requests.put( url, headers=self._headers, json=values, timeout=REQUEST_TIMEOUT, ) dataRes.raise_for_status() operationUrl = dataRes.headers.get("Location") if not operationUrl: operationUrl = dataRes.json().get("operationLocation") if not operationUrl: raise RuntimeError("スプレッドシートの更新で操作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("mainを呼び出しています") main() - 「保存」をクリックします。
この時点で、このスクリプトに必要な依存先を生成したことを確認する必要があります。
スクリプトの実行
このスクリプトを実行する前に、依存関係を生成しておく必要があります。この依存関係バンドルには、WorkivaのパブリックAPIを呼び出すために使用されるリクエスト用ライブラリ()が含まれています。
- スクリプトを開いた状態で、画面上部のメニューバーにあるスクリプト実行 をクリックします。
- Spreadsheets API に使用するために必要なパラメータ、スプレッドシート ID、シート ID、およびセルのテキストコンテンツを入力する。スクリプト実行 をクリックしてください。
メモ: IDはスプレッドシートのURLで検索できる:/spreadsheet/{spreadsheetId}/sheet/{sheetId} 。
スクリプトが完了したことを確認するには、スプレッドシートで更新されたセルをチェックする。
スプレッドシートから直接スクリプトを実行する
Workivaの自動化機能では、環境変数を通じてスプレッドシートおよびシートのIDが提供されますが、カスタムの実行時入力は渡されません。このスクリプトを自動化機能で使用する場合は、元のスクリプト内の「runtime-input」宣言を置き換えてください。スクリプトへのアクセスは、権限のあるユーザーに限定してください。ソースへのアクセス権を持つユーザーは、そのコード内で定義された値を閲覧できてしまうためです。
置換 :
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"- 資格情報のプレースホルダーとセルの値を、各自の値に置き換えてください。
- スクリプトを保存してください。
- スプレッドシートの「オートメーション」パネルで、の「手動実行」 トリガーを使用したオートメーションを作成します。
- 「」の「スクリプトの実行」 アクションを追加し、このスクリプトを選択します。
- 自動化を保存して実行します。
詳細については、および「オートメーションを使用したスクリプトの実行」 を参照してください。