📋

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秒以内 に返す必要があります。あまり処理が思いものは利用できないかも。

非確定的な引数を指定したときのエラー

参考

GitHubで編集を提案

Discussion