如何使用数组进行优化?
How can I optimize with an array?
我开始使用 JavaScript 学习 google 应用程序脚本。
我写了这段代码,但它真的很慢,而且执行该函数的时间太长了。我认为这不是执行该功能的最佳方式。
是否有任何 option/way (数组)使其更快或以其他方式减少等待时间?
我只想在另一个单元格列中插入 "today's date",当列单元格值设置为真时。
function onEdit() {
sConfDate();
}
function sConfDate(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getSheetByName("Data");
var dataRange = dataSheet.getRange(9, 1, dataSheet.getLastRow(), 43);
var data = dataRange.getValues();
var d = new Date();
var dd = d.getDate();
var mm = d.getMonth() +1;
var yyyy = d.getFullYear();
var date = dd + "/" + mm + "/" + yyyy;
var needSay = 'SUC';
var needSay2 = '-';
for(var i = 0; i < data.length; i++){
//row items
var values = data[i];
//column items
for(var j = 0; j < values.length; j++){
var row = values[j];
var checkRow = row;
//Logger.log(checkRow);
if(checkRow === needSay && checkRow === needSay2){
dataSheet.getRange(9 + i, 43).setValue(date);
};
};
};
}
也许这就是您的想法:
function sConfDate(){
var ss=SpreadsheetApp.getActive();
var dataSheet=ss.getSheetByName("Data");
var dataRange=dataSheet.getRange(9, 1, dataSheet.getLastRow()-8, 43);
var data=dataRange.getValues();
var datacol43=dataSheet.getRange(9,43,dataSheet.getLastRow()-8,1).getValues();
var date=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy");
data.forEach(function(r,i){
r.forEach(function(c,j){
if(c=='SUC' || c=='-') {
datacol43[i][0]=date;
}
});
});
dataSheet.getRange(9,43,dataSheet.getLastRow()-8,1).setValues(datacol43);
}
这实际上可能 运行 更快:
function sConfDate(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName("Data");
var rg=sh.getRange(9, 1, sh.getLastRow()-8, 43);
var data=rg.getValues();
var crg=sh.getRange(9,43,sh.getLastRow()-8,1);
var cdata=crg.getValues();
var date=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy");
for(var i=0;i<data.length;i++) {
for(var j=0;j<data[i].length;j++) {
if(data[i][j]=='SUC' || data[i][j]=='-') {
cdata[i][0]=date;
break;
}
}
}
crg.setValues(cdata);
}
也许这样会更好。
function sConfDate2(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName("Data");
var rg=sh.getRange(9, 1, sh.getLastRow()-8, 8);
var data=rg.getValues();
var crg=sh.getRange(9,8,sh.getLastRow()-8,1);
var cdata=crg.getValues();
var date=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy");
for(var i=0;i<data.length;i++) {
var row=data[i];//Im guessing this is probably what you want unless you have particular columns in mind
if(row.indexOf('SUC')!=-1 && row.indexOf('-')!=-1) {
cdata[i][0]=date;
}
}
crg.setValues(cdata);
}
我开始使用 JavaScript 学习 google 应用程序脚本。 我写了这段代码,但它真的很慢,而且执行该函数的时间太长了。我认为这不是执行该功能的最佳方式。 是否有任何 option/way (数组)使其更快或以其他方式减少等待时间? 我只想在另一个单元格列中插入 "today's date",当列单元格值设置为真时。
function onEdit() {
sConfDate();
}
function sConfDate(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getSheetByName("Data");
var dataRange = dataSheet.getRange(9, 1, dataSheet.getLastRow(), 43);
var data = dataRange.getValues();
var d = new Date();
var dd = d.getDate();
var mm = d.getMonth() +1;
var yyyy = d.getFullYear();
var date = dd + "/" + mm + "/" + yyyy;
var needSay = 'SUC';
var needSay2 = '-';
for(var i = 0; i < data.length; i++){
//row items
var values = data[i];
//column items
for(var j = 0; j < values.length; j++){
var row = values[j];
var checkRow = row;
//Logger.log(checkRow);
if(checkRow === needSay && checkRow === needSay2){
dataSheet.getRange(9 + i, 43).setValue(date);
};
};
};
}
也许这就是您的想法:
function sConfDate(){
var ss=SpreadsheetApp.getActive();
var dataSheet=ss.getSheetByName("Data");
var dataRange=dataSheet.getRange(9, 1, dataSheet.getLastRow()-8, 43);
var data=dataRange.getValues();
var datacol43=dataSheet.getRange(9,43,dataSheet.getLastRow()-8,1).getValues();
var date=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy");
data.forEach(function(r,i){
r.forEach(function(c,j){
if(c=='SUC' || c=='-') {
datacol43[i][0]=date;
}
});
});
dataSheet.getRange(9,43,dataSheet.getLastRow()-8,1).setValues(datacol43);
}
这实际上可能 运行 更快:
function sConfDate(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName("Data");
var rg=sh.getRange(9, 1, sh.getLastRow()-8, 43);
var data=rg.getValues();
var crg=sh.getRange(9,43,sh.getLastRow()-8,1);
var cdata=crg.getValues();
var date=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy");
for(var i=0;i<data.length;i++) {
for(var j=0;j<data[i].length;j++) {
if(data[i][j]=='SUC' || data[i][j]=='-') {
cdata[i][0]=date;
break;
}
}
}
crg.setValues(cdata);
}
也许这样会更好。
function sConfDate2(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName("Data");
var rg=sh.getRange(9, 1, sh.getLastRow()-8, 8);
var data=rg.getValues();
var crg=sh.getRange(9,8,sh.getLastRow()-8,1);
var cdata=crg.getValues();
var date=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy");
for(var i=0;i<data.length;i++) {
var row=data[i];//Im guessing this is probably what you want unless you have particular columns in mind
if(row.indexOf('SUC')!=-1 && row.indexOf('-')!=-1) {
cdata[i][0]=date;
}
}
crg.setValues(cdata);
}