我一直在使用Google脚本。当为hide / unhide选择下拉列表时,脚本的目的是取消隐藏或隐藏三个选项卡中的某些行。我可能有两件事我想解决,但在互联网上找不到任何有用的信息:
1)我认为脚本按操作顺序运行。因此,当选择一个下拉选项卡时,它会立即产生结果,因为这是脚本的第一个“层”。第二个选项卡较慢,因为它是脚本的第二个“层”,第三个选项卡需要很长时间,因为它是第三个“层”。有没有办法简化这个脚本,使标签功能同样快速?
2)在第三个标签上,好像脚本会超时。所有行都将取消隐藏,但当您通过下拉菜单进入隐藏它们时,它将停在某一行上。但是,如果您转到脚本并手动运行它,它完全有效。下面是我一直在使用的脚本(我删除了很多行,否则它会很长):
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName("TX MD 2017");
var row = s.getRange('C2').getValues();
s.showRows(1);
for(var i=0; i< row.length; i++){ if(row[i] == 'hide')
{ s.hideRows(5);
s.hideRows(7);
s.hideRows(9);}
else if(row[i] == 'unhide'){s.unhideRow(ss.getDataRange());}
}
s = ss.getSheetByName("DC MD 2017");
row = s.getRange('C2').getValues();
s.showRows(1);
for(var i=0; i< row.length; i++){ if(row[i] == 'hide')
{ s.hideRows(6);
s.hideRows(7);
s.hideRows(9); }
else if(row[i] == 'unhide'){s.unhideRow(ss.getDataRange());}
}
s = ss.getSheetByName("ATL MD 2017");
row = s.getRange('C2').getValues();
s.showRows(1);
for(var i=0; i< row.length; i++){ if(row[i] == 'hide')
{s.hideRows(6);
s.hideRows(7);
s.hideRows(9);}
else if(row[i] == 'unhide'){s.unhideRow(ss.getDataRange());}
}
}
答案 0 :(得分:1)
这一行:
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
}
}
}
}