我有下面的脚本,该脚本在范围“ S:S”中搜索“ Dead”或“ Booked”,并在找到该行时将其隐藏。如果在隐藏的行中找到“实时”,则应取消隐藏该行。 下面的脚本正在运行,但是它会取消隐藏所有行,然后完成该功能,当搜索超过1000行时可能需要一段时间。
function RowHide(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht2 = ss.getSheetByName("Log");
var row = sht2.getRange("S:S").getDisplayValues();
sht2.showRows(1, sht2.getMaxRows()); {
for (var i = 0; i < row.length; i++) {
if (row[i][0] == 'Dead') {
sht2.hideRows(i + 1, 1);
}
if (row[i][0] == 'Booked') {
sht2.hideRows(i + 1, 1);
} else if (row[i][0] == 'Live') {
sht2.showRows(i + 1, 1);
}
}
}
}
我需要将脚本更改为仅需要操作的操作行,而不是全部。这可能吗?
答案 0 :(得分:1)
function rowHideProbablyOnEdit(e){
var ss=e.source;
var rg=e.range;
var sh=rg.getSheet();
if(sh.getName()=="Log"){
var datR=sh.getDataRange();
var valA=datR.getValues();
for(var i=0;i<valA.length;i++){
if(valA[i][18]=='Dead' || valA[i][18]=='Booked'){
sh.hideRows(i+1);
}
}
}
}
function rowShowHideProbablyOnEdit(e){
var ss=e.source;
var rg=e.range;
var sh=rg.getSheet();
if(sh.getName()=="Log"){
var datR=sh.getDataRange();
var valA=datR.getValues();
for(var i=0;i<valA.length;i++){
if(valA[i][18]=='Dead' || valA[i][18]=='Booked'){
sh.hideRows(i+1);
}
if(valA[i][18]=='Live'){
Logger.log('Sheet: %s',sh.getName());
sh.showRows(i+1);
}
}
}
}
设置和测试功能:
function rowLiveSetup(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Log');
var rg=sh.getDataRange();
var vA=rg.getValues();
for(var i=0;i<vA.length;i++){
if(vA[i][18]=='Booked'){
vA[i][18]='Live';
}
}
rg.setValues(vA);
}
function rowBookedDeadSetup(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Log');
var rg=sh.getRange(1,1,180,20);
var vA=rg.getValues();
for(var i=0;i<180;i++){
if(i%3==0){
vA[i][18]='Booked';
}
if(i%3==1){
vA[i][18]='Dead';
}
}
rg.setValues(vA);
}