我試圖通過使用PropertiesServices將我的獎勵設置放入全局數組來加速Google電子表格中的處理/計算,而不是每當用戶更新其日常工作表時從設置表中加載獎金百分比。在Google電子表格中聲明全局數組
我使用的方法似乎沒有按照我的預期工作,FOR循環無法查找「ALL」。希望有人能夠提出一些建議。
我懷疑JSON結構不同於我的2D數組,但我不知道如何解決它,我是JavaScript的新手。
設定表僅含有4列:遊戲,起始日期,結束日期,花紅%
P/S:這是一個簡化的腳本。
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字符串還原回數組。 它似乎谷歌電子表格此刻沒有全局變量功能。 – Lee
如果數據大小小於100千字節,則可以使用緩存服務。我提出這個例子,因爲我曾想過你想使用''PropertiesService''。如果你想爲腳本使用緩存服務的示例代碼,請隨時告訴我。 https://developers.google.com/apps-script/reference/cache/ – Tanaike