Javascript 谷歌脚本-超时和简化

Javascript 谷歌脚本-超时和简化,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我使用谷歌脚本已经有一段时间了。该脚本的目的是在选择“隐藏/取消隐藏”下拉列表时,取消隐藏或隐藏三个选项卡中的某些行。我可能有两件事需要解决,但在互联网上找不到任何有用的信息: 1) 我认为脚本是按操作顺序运行的。因此,当选择tab one下拉列表时,会立即产生结果,因为这是脚本的第一个“层”。第二个选项卡速度较慢,因为它是脚本的第二个“层”,而第三个选项卡需要相当长的时间,因为它是第三个“层”。有没有办法简化此脚本,使选项卡功能同样快速 2) 在第三个选项卡上,脚本似乎将超时。所有行都将取消隐

我使用谷歌脚本已经有一段时间了。该脚本的目的是在选择“隐藏/取消隐藏”下拉列表时,取消隐藏或隐藏三个选项卡中的某些行。我可能有两件事需要解决,但在互联网上找不到任何有用的信息:

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;iSince
c2
是单个单元格,我认为
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
      }
    }  
  }
}