📋
Google Spreadsheetでカスタム関数を作成する
きっかけ
スプレッドシートの特定のセルの情報をもとにハッシュ化したIDを生成したかったが組み込みの関数ではそのような関数がなかった。
Apps Scriptはjavascriptとほぼ同じなので、Apps Script上作成した関数をスプレッドシートの関数として利用したい。
結論としてはApps Scriptに書いた関数をスプレッドシートから呼び出すことができた。
普通に公式ドキュメントに書いてあった。
呼び出し時のイメージ
やり方
関数の前に下記フォーマットでコメントを記述
どうやらこのコメントはJSDocというものらしい
ちなみに複数行コメント内に最低限 @customfunction
が書いてあればスプレッドシートから呼び出せる。
記載するコメント例
/**
* テスト用の関数 ← この行はなくてもOK
* @param {input} input The raw text. ← この行はなくてもOK
* @return value. ← この行はなくてもOK
* @customfunction
*/
今回の目的のハッシュ関数を記載した例
※ ハッシュ関数部分はAI生成
/**
* generate hash value using sha256 algorithm
* @param {input} input The raw text.
* @return generated hash.
* @customfunction
*/
function sha256(input) {
var rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, input, Utilities.Charset.UTF_8);
var txtHash = '';
for (var i = 0; i < rawHash.length; i++) {
var hashVal = rawHash[i];
if (hashVal < 0) {
hashVal += 256;
}
var hexVal = hashVal.toString(16);
if (hexVal.length == 1) {
txtHash += '0';
}
txtHash += hexVal;
}
return txtHash;
}
呼び出し時
関数の説明を書いていると呼び出し時に表示される
JSDoc部分を下記にように書くと呼び出せるが関数の説明が表示されない。
/**
* @customfunction
*/
ガイドラインや注意点などの抜粋
- 関数名は大文字で記述したほうが良い。
- 引数は確定的なものである必要がある。
rand()
などを引数にすると下記のようなエラーが発生する。 - カスタム関数呼び出しは
30秒以内
に返す必要があります。あまり処理が思いものは利用できないかも。
Discussion