【ExtendScript】スクリプト情報を取得してスプレットシートに書き込む方法

extendscript-get-script-data-post-spreadsheet

スクリプト使用時にスクリプト名と使用者と使用時間をスプレットシートに記載する仕組みを作成してみました。

ただしソケット通信など使わず、バッチを使った力技なのであしからず。

データベースをスプレットシートで作成

スクリプト名と使用者と使用時間の3つの項目を記載しておきます。

GASの記述

ツール>スクリプトエディタからGASを開き下記のコードを記述します(※スプレットシートID)

コピペ後、公開>ウェブアプリケーションとして導入の認証をして発行されたURLを控えます。

引用

https://qiita.com/hirohiro77/items/a947416f803f45777338

doGet通知で値を取得する方法

発行されたURLの最後にパラメータをつけてやると、値を渡すことができます!

たとえば

“https://script.google.com/macros/s/発行されたID/exec?p1=スクリプト名.jsx&p2=使用者名&p3=使用日時”

をexec?のあとに記述してURLを開くと3つのパラメータが渡せます!

ESTKからバッチを経由してスクリプトに値を渡す方法

ということでExtendスクリプトから、なんとかパラメータをつけたURLへアクセスして値を渡せば、スプレットシートに記録が取れるはずです!!

はじめはソケット通信でアクセスできないか、がんばってみたのですがうまくいかないので、バッチ(bat+vbs)とcurlを使ってアクセスするようにしてみました

【ExtendScript】WEBからデータをダウンロードするスクリプト

curlの導入

下記のURLからダウンロード。
https://curl.haxx.se/windows/

解凍して、下記のパスに格納しました。

C:\Program Files (x86)\curl-7.65.3-win64-mingw

【Google Spreadsheet】POST通信からスプレットシートに書き込む方法

スクリプト計測するExtendScript

  1. スクリプト名と使用者名と使用日時を取得して、発行されたURLの後ろに付けます

  2. ExtendScriptでCurlコマンドを使用してURLへアクセスするバッチを作成します。

  3. コマンドプロンプトを表示させたくないので、VBS経由で作成したバッチを実行します。

  • JSX

  • VBS

以上、実行するとスクリプト名と使用者名と使用日時が即座にスプレットシートに記載されます。

実際にスクリプトにつけて計測する

下記のようなイメージです。

  • JSX(実際に使用するスクリプト)

  • JSX(参照先)

最終的に、下記のような感じで記録されました!

残っている問題点

  • スクリプト名を日本語の場合、urlエンコードかけているのにも関わらずスクリプト名がちゃんと反映されない!

▶コピペでアクセスする分にはうまくいくのでバッチ処理が原因と思われる。(ちゃんと反映されればデコードして日本語名に戻せる)

▶解決しました。

バッチ処理でも「%」は「%%」と記述することでエスケープできるようです。

var webhookUrl = webhookUrl.replace( /%/g , "%%" ) ;   

事前にURLを置換することで、日本語名のスクリプト名も記述できるようになりました!

[追記]BridgeTalkで通信する場合

Bridgeの起動が必要ですが、下記のスクリプトを使用することでBridgeTalkだけで簡単に通信ができました!

Bridgeの環境設定をしておくとバックグラウンドで実行できるようになります。

ただしCurlを使うより通信に時間がかかります。

まとめ

ただ単にURLにアクセスするだけなのに、ソケット通信ができなくて

JSX▶BAT▶VBS▶CURLと渡って、ものすごく残念な形なのですが

とりあえず力技でスクリプト名と使用者名と使用日時を取得して、スプレットシートに書いてみました。

ソケット通信がうまくできたら、JSXだけで完結するので改良を目指します!