簡體   English   中英

在幾個特定選項卡上運行 Google Sheets 腳本

[英]Run Google Sheets script on several certain tabs

我有一個工作腳本,它在一個名為“One”的選項卡上創建依賴下拉列表。 現在我需要它為另一個名為“中間”的類似選項卡和名為“混合”的第三個選項卡工作。 這些選項卡的結構彼此相似。 如何使用以下腳本管理它?

var mainWsName = "One";                             
var optionsWsName = "STOK";                             
var firstLevelColumn = 5;                               
var secondLevelColumn = 6;                              
var thirdLevelColumn = 7;                               

var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(mainWsName);                              
var wsOptions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(optionsWsName);                                

function onEdit(e){                             
var activeCell = e.range;                               
var val = activeCell.getValue();                                
var r = activeCell.getRow();                                
var c = activeCell.getColumn();                             
var wsName = activeCell.getSheet().getName();                               
if(wsName === mainWsName && c === firstLevelColumn && r > 4){                               
applyFirstLevelValidation(val,r);                               
} else if(wsName === mainWsName && c === secondLevelColumn && r > 4){                               
applySecondLevelValidation(val,r);                              
}                               
} //end onEdit                              

function applyFirstLevelValidation(val,r){                              
if(val === ""){                             
ws.getRange(r, secondLevelColumn).clearContent();                               
ws.getRange(r, secondLevelColumn).clearDataValidations();                               
ws.getRange(r, thirdLevelColumn).clearContent();                                
ws.getRange(r, thirdLevelColumn).clearDataValidations();                                
} else {                                
ws.getRange(r, secondLevelColumn).clearContent();                               
ws.getRange(r, secondLevelColumn).clearDataValidations();                               
ws.getRange(r, thirdLevelColumn).clearContent();                                
ws.getRange(r, thirdLevelColumn).clearDataValidations();                                
var filteredOptions = wsOptions.getDataRange().getValues().filter(function(o){ return o[0] === 
val });  // <--- Modified                               
var listToApply = filteredOptions.map(function(o){ return o[1] });                              
var cell = ws.getRange(r, secondLevelColumn);                               
applyValidationToCell(listToApply,cell);                                
}                               
}                               

function applySecondLevelValidation(val,r){                             
if(val === ""){                             
ws.getRange(r, thirdLevelColumn).clearContent();                                
ws.getRange(r, thirdLevelColumn).clearDataValidations();                                
} else {                                
ws.getRange(r, thirdLevelColumn).clearContent();                                
var firstLevelColValue = ws.getRange(r, firstLevelColumn).getValue();                               
var filteredOptions = wsOptions.getDataRange().getValues().filter(function(o){ return o[0] === 
firstLevelColValue && o[1] === val });  // <--- Modified                                
var listToApply = filteredOptions.map(function(o){ return o[2] });                              
var cell = ws.getRange(r, thirdLevelColumn);                                
applyValidationToCell(listToApply,cell);                                
}                               
}                               

function applyValidationToCell(list,cell){                              
var rule = SpreadsheetApp                               
.newDataValidation()                                
.requireValueInList(list)                               
.setAllowInvalid(false)                             
.build();                               

cell.setDataValidation(rule)                                
}   

你的線路

if(wsName === mainWsName && c === firstLevelColumn && r > 4){   

包含一個if語句,該語句僅在編輯的工作表名稱等於mainWsName的條件下運行applyFirstLevelValidation(val,r) ,由此

var mainWsName = "One";

現在,如果您想為不止一張紙運行該函數:

  1. 您需要為所有感興趣的工作表名稱創建額外的變量,並將編輯過的工作表名稱與所有這些變量進行比較,並使用|| 操作員。

  2. 您需要將編輯過的工作表名稱wsName傳遞給函數applyFirstLevelValidation以確保代碼應用於正確的工作表。

樣本:


var mainWsName1 = "One";   
var mainWsName2 = "Two";                          
var optionsWsName = "STOK";                             
var firstLevelColumn = 5;                               
var secondLevelColumn = 6;                              
var thirdLevelColumn = 7; 

var wsOptions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(optionsWsName);                                

function onEdit(e){                             
  var activeCell = e.range;                               
  var val = activeCell.getValue();                                
  var r = activeCell.getRow();                                
  var c = activeCell.getColumn();                             
  var wsName = activeCell.getSheet().getName();
  // compare the edited sheet name against multiple allowed sheet anmes with ||                               
  if(wsName == mainWsName1 || wsName == mainWsName2 && r > 4){
    if(c == firstLevelColumn){                               
      applyFirstLevelValidation(val,r, wsName);                               
    } else if(c == secondLevelColumn){                               
      applySecondLevelValidation(val,r, wsName);                              
    }  
  }                             
} 

function applyFirstLevelValidation(val,r,wsName){
  //  obtain the sheet name dynamically from the onEdit() function  
  var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(wsName);                            
  if(val == ""){                             
    ws.getRange(r, secondLevelColumn).clearContent();                               
    ws.getRange(r, secondLevelColumn).clearDataValidations();                               
    ws.getRange(r, thirdLevelColumn).clearContent();                                
    ws.getRange(r, thirdLevelColumn).clearDataValidations();                                
  } else {                                
    ws.getRange(r, secondLevelColumn).clearContent();                               
    ws.getRange(r, secondLevelColumn).clearDataValidations();                               
    ws.getRange(r, thirdLevelColumn).clearContent();                                
    ws.getRange(r, thirdLevelColumn).clearDataValidations();                                
    var filteredOptions = wsOptions.getDataRange().getValues().filter(function(o){ return o[0] == 
      val });  // <--- Modified                               
    var listToApply = filteredOptions.map(function(o){ return o[1] });                              
    var cell = ws.getRange(r, secondLevelColumn);                               
    applyValidationToCell(listToApply,cell);                                
  }                               
}                               

function applySecondLevelValidation(val,r, wsName){   

  //change in the same way as function applyFirstLevelValidation
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM