0

Google が計算を終了するとすぐにコマンドを実行できるようにするスクリプトを作成しようとしています (つまり、VBA の「計算」機能を模倣するスクリプトを Google ドキュメントに追加しようとしています)。

このスクリプトは、範囲を文字列に変換し、その文字列内の部分文字列 "Loading..." (または "#VALUE!" または "#N/A") を探すことによって機能するように考えられています。「while」ループは、不要な部分文字列が文字列内に見つからなくなるまでスリープすることになっています。

次のスプレッドシートをサンドボックスとして使用しています。コードはサンドボックスで「読み込み中...」を検索するだけで問題なく動作するようです。

https://docs.google.com/spreadsheet/ccc?key=0AkK50_KKCI_pdHJvQXdnTmpiOWM4Rk5PV2k5OUNudVE#gid=0

ただし、他のコンテキストでは、値が「#VALUE!」として返されるセルがあります。または「#N/A」は、Google がまだ読み込み中、検討中、計算中という事実以外の理由によるものです。これを回避する方法は何ですか?

    function onEdit() {

Refresh();

};

function Refresh () {

     var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
     var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");

     // set the range wherever you want to make sure loading is done    

     var range = sheet.getRange('A:A')
     var values = range.getValues();

     var string = values.toString();

     var loading = "Loading";

                do
                  {
                  var randomWait = Math.floor(Math.random()*100+50); 
                  Utilities.sleep(randomWait);
                }
                while (string.search(loading) ==! null);

      range.copyTo(sheet2.getRange('A1'), {contentsOnly:true});

customMsgBox();

};

function customMsgBox() {
  Browser.msgBox("Data refreshed.");
};
4

1 に答える 1

0

while ループを使用して「スリープ」するのではなく、更新/更新イベントをキャプチャして必要な数学/処理を実行するイベント ハンドラーをドキュメントに追加する必要があります。

イベントについて読み始めるのに適した場所は次のとおりです: https://developers.google.com/apps-script/understanding_events

しかし、API ドキュメントで eventhandler を検索すると、いくつかのサンプル コードをすばやく取得できます...

于 2014-03-28T18:29:13.980 に答える