筆者用兩個3*3陣列相乘來說明程式碼的優化。
寫法1:
function setValue()
{
start_time = new Date().getTime();
var ss = SpreadsheetApp.getActiveSheet();
ss.clear();
for(var i = 0 ; i < 3 ; i++)
{
for(var j = 0 ; j < 3 ; j++)
{
ss.getRange(i+1, j+1).setValue((i+1) * (j+1));
ss.getRange(i+6, j+1).setValue((i+3) * (j+3));
}
}
var var1 = ss.getRange(1, 1, 3, 3);
var var2 = ss.getRange(6, 1, 3, 3);
for(var i = 0 ; i < var1.getLastRow() ; i++)
{
for(var j = 0 ; j < var1.getLastColumn() ; j++)
{
var var3 = ss.getRange(i+1, j+1).getValue() * ss.getRange(i+6, j+1).getValue();
ss.getRange(i+11, j+1).setValue(var3);
}
}
end_time = new Date().getTime();
Logger.log((end_time - start_time) / 1000 + "sec");
}
執行時間:寫法2:
function setValue2()
{
start_time = new Date().getTime();
var ss = SpreadsheetApp.getActiveSheet();
ss.clear();
for(var i = 0 ; i < 3 ; i++)
{
for(var j = 0 ; j < 3 ; j++)
{
ss.getRange(i+1, j+1).setValue((i+1) * (j+1));
ss.getRange(i+6, j+1).setValue((i+3) * (j+3));
}
}
var var1 = ss.getRange(1, 1, 3, 3);
var var2 = ss.getRange(6, 1, 3, 3);
for(var i = 0 ; i < var1.getLastRow() ; i++)
{
for(var j = 0 ; j < var1.getLastColumn() ; j++)
{
var v1 = var1.getValues();
var v2 = var2.getValues();
var var3 = v1[i][j] * v2[i][j];
ss.getRange(i+11, j+1).setValue(var3);
}
}
end_time = new Date().getTime();
Logger.log((end_time - start_time) / 1000 + "sec");
}
執行時間:寫法3:
function setValue3()
{
start_time = new Date().getTime();
var ss = SpreadsheetApp.getActiveSheet();
ss.clear();
for(var i = 0 ; i < 3 ; i++)
{
for(var j = 0 ; j < 3 ; j++)
{
ss.getRange(i+1, j+1).setValue((i+1) * (j+1));
ss.getRange(i+6, j+1).setValue((i+3) * (j+3));
}
}
var var1 = ss.getRange(1, 1, 3, 3);
var var2 = ss.getRange(6, 1, 3, 3);
var var3 = [3];
for(var i = 0 ; i < var1.getLastRow() ; i++)
{
var3[i] = [3];
for(var j = 0 ; j < var1.getLastColumn() ; j++)
{
var v1 = var1.getValues();
var v2 = var2.getValues();
var3[i][j] = v1[i][j] * v2[i][j];
}
}
ss.getRange(11, 1, 3, 3).setValue(var3);
end_time = new Date().getTime();
Logger.log((end_time - start_time) / 1000 + "sec");
}
執行時間:結論:從寫法1、寫法2的的程式碼來看似乎沒有太大的差異,寫法2已對執行效率進行優化,在寫法3中,將陣列方法導入,執行時間就大幅優化,這可看出setValue、setValues多次使用皆會拉長執行時間,建議減少需要多次setValue、setValues。



