2

この投稿では、コンテナ拡張コードScriptDBのグローバル データの中間ストレージとしてを使用することを提案しました。回答のサンプル コードを作成しましたが、サンプルは例外を 1行でスローします。問題を示す次の簡単な例を作成しました。と関数の両方のコードは、エディターで実行することで使用できます。スプレッドシートダイアログのボタンを押すと、関数は問題なく実行されます。この機能はどこでも機能します。error: You do not have permission to call query (line X)ScriptDb.getMyDb().query(...);getDBSizegetSourceScriptDBgetDBSizeRunScript ManagergetSource

example- linkのスプレッドシートを公開しました。ビューのコードを共有することはできませんが、セルに出力することは可能です。セルには次のB3コードが正確に含まれています。

スプレッドシートコードがにアクセスできるようにするにはどうすればよいScriptDBですか?

function getDBSize() {
  var db = ScriptDb.getMyDb(); 
  var result = db.query({});  
  var count = result.getSize();
  return count;
}

function getSource() {
  return this.toSource();
}
4

1 に答える 1

1

問題は、この関数をスプレッドシートとして実行しようとしていることです。カスタム関数は、リンクしたContainerExtensionページcustom functionのすべての例よりもはるかに制限されています。

ただし、理論的な観点からは、カスタム関数と単純なイベントハンドラー(onEditなどonOpen)は、ユーザーアカウントを必要とするものや、ユーザーに関連付けられているものにはアクセスできず、「一般的な」メソッドのみにアクセスできます。たとえばUrlFetchApp、、現在のスプレッドシートを開くか、を読みますScriptProperties

したがって、論文では、クエリはScriptDb可能であるはずです。これは一般的な呼び出しであり、アクティブユーザーとは関係がないため、に類似していScriptPropertiesます。実際にデータベースにクエリを実行できる回避策はありませんが、代わりに使用できますScriptPropertiesScriptDbとを使用するJSON.stringifyと、保存するオブジェクトを簡単に保存および取得できます.parse。もちろん、私はScriptDbケイパビリティとを比較していませんScriptProperties。それは単なる回避策です。

とにかく、これは私たちの課題追跡システムの拡張リクエストの良い候補のようです。

于 2012-10-19T19:18:58.173 に答える