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.");
};