Googleスプレッドシートで処理/計算を高速化しようとしていますが、ボーナス%をロードする代わりにPropertiesServicesを使用してグローバル配列にボーナスを設定します。Googleスプレッドシートでグローバル配列を宣言
私が使用した方法は期待通りに機能しないようですが、FORループは "ALL"を探すことができません。誰かに助言を与えることを望む人。
私はJSON構造が私の2D配列とは異なると思っていましたが、私はそれを解決する方法がわかりません、私はjavascriptsには新しいです。ゲーム、開始日、終了日、ボーナス%
P/S:これは単純化されたスクリプトのみ4列を含む
設定シート。
function onOpen(event) {
var bonusSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Setting");
var bonusCompany = bonusSheet.getRange("A46:D503").getValues();
PropertiesService.getDocumentProperties().setProperty("bonusCompany", JSON.stringify(bonusCompany));
}
function onEdit(event) {
var colGame = "H";
var colBonus = "K";
var numColBonus = 11;
var nPoint;
var sheet = event.source.getActiveSheet();
var row = sheet.getActiveCell().getRow();
var col = sheet.getActiveCell().getColumn();
var cGame = sheet.getRange(colGame+row).getValue();
var dDate = new Date();
for(var k=0, kLen=bonusCompany.length; k<kLen; k++)
{
if((bonusCompany[k][0] == cGame || bonusCompany[k][0] == "ALL") && dDate.valueOf() >= bonusCompany[k][1] && dDate.valueOf() <= bonusCompany[k][2]){
sheet.getRange(event.range.rowStart,numColBonus,event.range.rowEnd-event.range.rowStart+1,1).setValue(nPoint*bonusCompany[i][4]/100);
return;}
}
sheet.getRange(event.range.rowStart,numColBonus,event.range.rowEnd-event.range.rowStart+1,1).setValue(0);
}
ご協力ありがとうございます。 グローバル配列を格納するためにpropertiesServicesを使用してメソッドをテストしましたが、処理速度は設定シートから直接ロードするgetValues()を使用するよりもさらに遅くなります。 propertiesServicesメソッドはJSON文字列として配列を格納している可能性があります。ユーザーが何かを編集するたびに配列にJSON文字列を戻す必要があります。 現時点ではgoogle-spreadsheetにはグローバル変数機能がないようです。 – Lee
データサイズが100 KB未満の場合は、キャッシュサービスを使用できます。私はあなたが '' PropertiesService''を使いたいと思っていたので、このサンプルを提案しました。あなたのスクリプトにキャッシュサービスを持つサンプルコードが必要なら、教えてください。 https://developers.google.com/apps-script/reference/cache/ – Tanaike