今日もGoogle Apps Scriptのお話です。
onEditファンクションはスプレッドシートのセルが更新されるたびに呼ばれます。
とても便利ですが、注意すべき点があります。
例えば以下の様なスプレッドシートがあるとします。
B1列にはファイルIDが書かれています。
そのファイルIDの示すドキュメントはこちら。
このドキュメントのファイル名を取得してB2セルに書き込む処理を考えます。
普通に書くとこんな感じです。
function func01() {
var range = SpreadsheetApp.getActiveSheet().getRange(1, 2);
// セルに記載された文字をIDとしてドライブからファイルを読み込む。
var file = DriveApp.getFileById(range.getValue());
// ファイル名をB2セルへ書き込む。
SpreadsheetApp.getActiveSheet().getRange(2, 2).setValue(file.getName());
}
結果はこんな感じ。想定通りです。
続いて本題のonEditを使った処理です。
B1セルにファイルIDを記述した、というイベントを拾ってファイル名を取得、書き込みを実行します。
function onEdit(param) {
// 編集されたセルの参照を取得する。
var range = param.range;
if (range.getRow() != 1 && range.getColumn() != 2) {
// B1のセル以外が編集された場合は処理を抜ける。
return;
}
// セルに記載された文字をIDとしてドライブからファイルを読み込む。
var file = DriveApp.getFileById(range.getValue());
// ファイル名をB2セルへ書き込む。
SpreadsheetApp.getActiveSheet().getRange(2, 2).setValue(file.getName());
}
結果は書き変わりません・・・
ロジック的には間違ってないはずですが・・・
実行ログを見てみると・・・
権限が無い、というエラーが発生しています。
これは私の憶測ですが、onEditでバンバン更新されて
バンバンGoogleドライブにアクセスされたらたまらん!
というGoogleの中の人の防御策ではないかと思っています。
私がGoogleの中の人だったら
「読めなくすりゃいんじゃね?onEditでドライブなんか読みに来んなよ。迷惑なんだよ。」
と思うと思いますので仕方ないですかね。
|
|
にほんブログ村 |
プログラマー ブログランキングへ |





0 件のコメント:
コメントを投稿