Javascript 谷歌脚本-超时和简化
我使用谷歌脚本已经有一段时间了。该脚本的目的是在选择“隐藏/取消隐藏”下拉列表时,取消隐藏或隐藏三个选项卡中的某些行。我可能有两件事需要解决,但在互联网上找不到任何有用的信息: 1) 我认为脚本是按操作顺序运行的。因此,当选择tab one下拉列表时,会立即产生结果,因为这是脚本的第一个“层”。第二个选项卡速度较慢,因为它是脚本的第二个“层”,而第三个选项卡需要相当长的时间,因为它是第三个“层”。有没有办法简化此脚本,使选项卡功能同样快速 2) 在第三个选项卡上,脚本似乎将超时。所有行都将取消隐藏,但当您通过下拉菜单进入以隐藏它们时,它将在某一行上停止。但是,如果转到脚本并手动运行它,它将完全起作用。下面是我一直在使用的脚本(我删除了下面很多行,否则会很长):Javascript 谷歌脚本-超时和简化,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我使用谷歌脚本已经有一段时间了。该脚本的目的是在选择“隐藏/取消隐藏”下拉列表时,取消隐藏或隐藏三个选项卡中的某些行。我可能有两件事需要解决,但在互联网上找不到任何有用的信息: 1) 我认为脚本是按操作顺序运行的。因此,当选择tab one下拉列表时,会立即产生结果,因为这是脚本的第一个“层”。第二个选项卡速度较慢,因为它是脚本的第二个“层”,而第三个选项卡需要相当长的时间,因为它是第三个“层”。有没有办法简化此脚本,使选项卡功能同样快速 2) 在第三个选项卡上,脚本似乎将超时。所有行都将取消隐
函数onEdit(e){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getSheetByName(“2017年德克萨斯州MD”);
var row=s.getRange('C2').getValues();
s、 展示区(1);
对于(var i=0;i
此行:
s.unhideRow(ss.getDataRange());
应该是:
s.showRows(1, s.getLastRow());
使用s.unhideRow(ss.getDataRange())
可以获得整个电子表格的数据范围。文件规定: 由电子表格中的所有数据组成的范围 这可能就是代码运行如此缓慢的原因 代码可以合并为:
function onEdit(e) {
var arrayOfRowsToHide,i,j,k,L,objectOfSettings,row,s,ss;
ss = SpreadsheetApp.getActiveSpreadsheet();
objectOfSettings = {
"TX MD 2017":[5,7,9],
"DC MD 2017":[6,7,9],
"ATL MD 2017":[6,7,9]
}
for (k in objectOfSettings) {//Loop through all settings
s.showRows(1);
s = ss.getSheetByName(k);//get this sheet by name
row = s.getRange('C2').getValues();
Logger.log('row: ' + row)
L = row.length;//The number of rows to check
arrayOfRowsToHide = objectOfSettings[k];//Get array of row numbers
for (i=0; i<L; i++) {//Loop through all rows in the data from getValues()
if(row[i] === 'hide') {
for (j=0;j<arrayOfRowsToHide.length;j++) {//hide all rows
s.hideRows(arrayOfRowsToHide[j]);
}
break;//If this row has a status of "hide" then hide rows and quit
} else if (row[i] === 'unhide') {
s.showRows(1, s.getLastRow());//show all rows in the sheet
break;//continue to next sheet
}
}
}
}
函数onEdit(e){
变量arrayOfRowsToHide,i,j,k,L,设置对象,行,s,ss;
ss=电子表格应用程序。getActiveSpreadsheet();
objectOfSettings={
“2017年德克萨斯州MD”:[5,7,9],
“2017年DC MD”:[6,7,9],
《2017年澳大利亚航空运输协会部长》:[6,7,9]
}
对于(objectOfSettings中的k){//循环所有设置
s、 展示区(1);
s=ss.getSheetByName(k);//按名称获取此工作表
row=s.getRange('C2').getValues();
Logger.log('行:'+行)
L=row.length;//要检查的行数
arrayOfRowsToHide=objectOfSettings[k];//获取行号数组
for(i=0;iSincec2
是单个单元格,我认为for
是不必要的。您还调用了ss.getDataRange()
三次,但其值没有更改。感谢您的响应。我放置了s.showRows(1,s.getLastRow())而且速度似乎更快。我会努力进行整合,但可能需要一点时间才能完成学习过程。再次感谢。
function onEdit(e) {
var arrayOfRowsToHide,i,j,k,L,objectOfSettings,row,s,ss;
ss = SpreadsheetApp.getActiveSpreadsheet();
objectOfSettings = {
"TX MD 2017":[5,7,9],
"DC MD 2017":[6,7,9],
"ATL MD 2017":[6,7,9]
}
for (k in objectOfSettings) {//Loop through all settings
s.showRows(1);
s = ss.getSheetByName(k);//get this sheet by name
row = s.getRange('C2').getValues();
Logger.log('row: ' + row)
L = row.length;//The number of rows to check
arrayOfRowsToHide = objectOfSettings[k];//Get array of row numbers
for (i=0; i<L; i++) {//Loop through all rows in the data from getValues()
if(row[i] === 'hide') {
for (j=0;j<arrayOfRowsToHide.length;j++) {//hide all rows
s.hideRows(arrayOfRowsToHide[j]);
}
break;//If this row has a status of "hide" then hide rows and quit
} else if (row[i] === 'unhide') {
s.showRows(1, s.getLastRow());//show all rows in the sheet
break;//continue to next sheet
}
}
}
}