Edited at

Zoho Sheet に Deluge と JSON で行を追加する方法

(初出: 2019-08-01 を一部改訂 "How to append JSON data as rows in a Zoho Sheet" を改題)

Zoho Mail では Deluge によるカスタム関数定義でフィルターを書けるわけだが、その仕様は判然としない。フィルターにカスタム関数を使うことを指定した段階で簡素なエディターが開き、そこでいくつかの機能はわかる。実際にははるかに多くの機能を利用できるようだ。特に Zoho プロダクトと連携する機能はおもしろい。

Deluge のエディターの中で zoho. と入力すると Zoho 各サービスの名前がずらりと出てくる。ここで sheet. と入力すれば、Zoho Sheet に対して何を行えるかがうかがえる。特に createRecords が興味深い。その名の通り既存のシート上へデータを追記するものだ。

残念ながら Deluge のドキュメントを漁ってみても zoho.sheet オブジェクトの createRecords メソッドの直接的な説明は発見できない。REST API の説明ならある。これを見ながらアタリを付ければ、なんとかなる人にはなんとかなるだろう。

下準備として、ワークシートに A1:”Name”, B1:”Region”, C1:”Units” と入力しておく。これがワークシート上のデータベースの各フィールドとなる。 なお実験ではフィールド名に少なくとも日本語の文字は使えなかった。データベースのフィールド名だと思えばさほど不満もないが、やはり Zoho には (というか Google などの巨大プレイヤー以外には) 小国 (日本も含む) の事情にまでは手が回らないのだろう。

Zoho Sheet REST API v2: Append rows with JSON data を参照して適当に読み替え、次の関数を作ってみる。

string TEST() {

resourceId = "RESOURCEID"; // 37-char string
sheetName = "Sheet1";
data = {{"Name":"Joe","Region":"South","Units":284},
{"Name":"Beth","Region":"East","Units":290}};
result = zoho.sheet.createRecords(resourceId, sheetName, data);
return result;
}

RUN してみると、A2:C3 セルにデータが追加された。戻り値はいらないのだろうが、デバッグ中はあった方がエラーメッセージが取得できるのでよい。

上記は REST API の メソッド worksheet.jsondata.append を呼び出すようだ。同種のメソッドとしては worksheet.csvdata.append もある。こちらは data に CSV data を設定することになっている。Deluge でも list ではなく CSV な単一文字列を渡す必要がある。 insertCSV というメソッド名だが、実際の動作は append である。