はじめに
WorkatoでGoogle Sheetsコネクタを利用してGoogle Sheetsへ行を複数追加する際は、Add row
を利用して1行ずつループで追加するか、Add rows in bulk
を利用して複数行まとめて追加します。
Add rows in bulk
を利用すれば複数行をまとめて(ループせず1タスクで)Google Sheetsへ追加できますが、このアクションを利用するには別途オプション(ETL/ELT Bulk Data Processing)契約が必要となります。
今回は、オプション契約せずにGoogle Sheetsへ複数行追加する方法について考えてみました。
レシピ
レシピの再利用性を高めるために、Recipe functionsとして作成を進めます。
Recipe functionsとしてレシピを作成することで、サブルーチンや関数のように別のレシピから呼び出して利用することができます。
設定
トリガ
キー | 値 |
---|---|
spreadsheet_id | 追加先のGoogle SheetsスプレッドシートID(赤枠で示した箇所) |
sheet | 追加先のGoogle Sheetsのシート名(赤枠で示した箇所) |
rows | 行(リスト) |
└row | 行のセルの値( ::: をセパレータとして複数列の値をセットする) |
※スキーマ設定(JSON)
[
{
"name": "spreadsheet_id",
"type": "string",
"optional": false,
"control_type": "text",
"label": "Spreadsheet ID",
"hint": "Google SheetsのSpreadsheetIdを入力します。"
},
{
"name": "sheet",
"type": "string",
"optional": false,
"hint": "Google Sheetsのシート名を入力します。",
"control_type": "text",
"label": "Sheet"
},
{
"name": "rows",
"type": "array",
"optional": false,
"properties": [
{
"name": "row",
"type": "string",
"optional": false,
"control_type": "text",
"label": "Row",
"hint": "列の値をセットします。列の区切り文字(セパレータ)は ::: を使用してください。"
}
],
"of": "object",
"label": "Rows"
}
]
アクション
Step 2
Name
任意の名称
Input
キー | 値 |
---|---|
rows | Step 1の Rows を指定し、formulaモードへ切り替えたうえで .to_json メソッドでJSONテキストに変換する |
Output schema
キー | 値 |
---|---|
result | JSONテキスト用のリスト文字列を出力する |
Code
各行のセパレータやダブルクォーテーションのエスケープ処理を行いながら、JSONテキスト用のリスト文字列を生成します。
rows = parse_json(input['rows']).pluck('row')
result = ''
rows.each{|row|
tmp = '';
if ! result.blank?
result = result + ",\n"
end
row.split(':::').each{|col|
if tmp.blank?
tmp = '['
else
tmp = tmp + ','
end
tmp = tmp + '"' + col.gsub('"','\"') + '"'
}
tmp = tmp + ']'
result = result + tmp
}
{result: result}
Step3
Google Sheetsコネクタを追加し、 Custom action
を選択します。
※Google Sheets APIの、Method: spreadsheets.values.appendを利用して複数行を追加します。
Action name
任意の名称
Method
POST
Path
※上のイメージを文字列化したもの
"spreadsheets/" + <Spreadsheet ID | Step1> + "/values/" + <Sheet | Step1>.encode_url + ":append?valueInputOption=USER_ENTERED"
データピル | 説明 |
---|---|
Spreadsheet ID | Step1 | Step1 のSpreadsheet ID |
Sheet | Step1 | Step1 のSheet |
Request type
Raw request body
Response type
JSON response
Input
※上のイメージを文字列化したもの
{
"values": [<Result | Step2>]
}
データピル | 説明 |
---|---|
Result | Step2 | Step2 のResult |
Request headers
Name | Value |
---|---|
Content-Type | application/json |