WorkivaスクリプトがWorkivaでどのように機能するかを示すために、スプレッドシートのセルを更新する簡単なスクリプトを作成しました。以下のステップに従って、自分のワークスペースでスクリプトを複製することができます。
注: スクリプトは現在カスタマイズWorkivaからのみ利用可能です。詳細はこちら
要件
- ワークスペースで Workiva スクリプトを有効にする必要があります。Workivaスクリプトの詳細はこちら。
- スクリプトを作成または編集するには、スクリプト編集者 の役割が必要です。
- このスクリプトをスプレッドシートから直接実行するには、依存先の生成 が必要である。これは、Workiva Public API とのやりとりに必要な「リクエスト」ライブラリを含みます。
スクリプトをビルドする
ワークスペースでスクリプトを構築するには、以下のステップに従います:
- ホームから+ 作成 => スクリプト をクリックする。
- 右側に、スクリプトの名称と簡単な説明を入力します。
- 画面中央のスクリプトエディタに移動し、既存のコードを削除します。以下をコピーして貼り付けます:
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() - [保存]をクリックします。
この時点で、このスクリプトに必要な依存先を生成したことを確認する必要があります。
スクリプトの実行
スクリプトを手動化するには:
- スクリプトを開いた状態で、画面上部のメニューバーにあるスクリプト実行 をクリックします。
- Spreadsheets API に使用するために必要なパラメータ、スプレッドシート ID、シート ID、およびセルのテキストコンテンツを入力する。スクリプト実行 をクリックしてください。
メモ: IDはスプレッドシートのURLで検索できる:/spreadsheet/{spreadsheetId}/sheet/{sheetId} 。
スクリプトが完了したことを確認するには、スプレッドシートで更新されたセルをチェックする。
スプレッドシートから直接スクリプトを実行する
このスクリプトや同様のスクリプトは、自動化 を使用してスプレッドシートから直接実行することもできる。
このスクリプトを自動化で使用するには:
- 既存のコードを削除します。
- 以下のコードで代替します:
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() - この記事に移動し、ステップに従ってスプレッドシートからスクリプトを実行します。