繁体   English   中英

如何将 Google Apps 脚本应用于多张工作表(相关下拉菜单)

[英]How to apply Google Apps Script to multiple sheets (dependent drop downs)

当我尝试运行从@Rafa Guillermo获得的脚本时收到此消息

SyntaxError: Unexpected token '{' Line: 11 File: Code.gs

线:11 是

if (!(only.includes(e.range.getSheet().getName())) {
   return;
}

这是整个代码:

var optionsWsName = "드롭다운 확인";
var wsOptions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(optionsWsName);
var options = wsOptions.getRange(2, 1, wsOptions.getLastRow()-1, 4).getValues();
var only = ["2021 1월", "2021 2월", "2021 3월"];
var firstLevelColumn = 3;
var secondLevelColumn = 4; 
var thirdLevelColumn = 5; 
var fourthLevelColumn = 6;

function onEdit(e) {
   if (!(only.includes(e.range.getSheet().getName())) {
   return;
   }

   var activeCell = e.range;
   var val = activeCell.getValue();
   var row = activeCell.getRow();

   if (row <= 1) return;

   var column = activeCell.getColumn();

   if(c === firstLevelColumn){
     applyFirstLevelValidation(val, r);
   } else if(c === secondLevelColumn){ 
     applySecondLevelValidation(val, r);
   } else if(c === thirdLevelColumn){ 
     applyThirdLevelValidation(val, r);
   }

} 


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();
          ws.getRange(r, fourthLevelColumn).clearContent();
          ws.getRange(r, fourthLevelColumn).clearDataValidations();
        } else {
          ws.getRange(r, secondLevelColumn).clearContent();
          ws.getRange(r, secondLevelColumn).clearDataValidations();
          ws.getRange(r, thirdLevelColumn).clearContent();
          ws.getRange(r, thirdLevelColumn).clearDataValidations();
          ws.getRange(r, fourthLevelColumn).clearContent();
          ws.getRange(r, fourthLevelColumn).clearDataValidations();
          var filteredOptions = options.filter(function(o){ return o[0] === val });
          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();
          ws.getRange(r, fourthLevelColumn).clearContent();
          ws.getRange(r, fourthLevelColumn).clearDataValidations();
        } else {
          ws.getRange(r, thirdLevelColumn).clearContent();
          ws.getRange(r, thirdLevelColumn).clearDataValidations();
          ws.getRange(r, fourthLevelColumn).clearContent();
          ws.getRange(r, fourthLevelColumn).clearDataValidations();
          var firstlevelColValue = ws.getRange(r, firstLevelColumn).getValue();
          var filteredOptions = options.filter(function(o){ return o[0] === firstlevelColValue && o[1] === val });
          var listToApply = filteredOptions.map(function(o){ return o[2] });
          var cell = ws.getRange(r, thirdLevelColumn);
          applyValidationToCell(listToApply,cell);
        }
        
}
    
    
    
function applyThirdLevelValidation(val, r){
      
      if(val === ""){
          ws.getRange(r, fourthLevelColumn).clearContent();
          ws.getRange(r, fourthLevelColumn).clearDataValidations();
        } else {
          ws.getRange(r, fourthLevelColumn).clearContent();
          var firstlevelColValue = ws.getRange(r, firstLevelColumn).getValue();
          var secondlevelColValue = ws.getRange(r, secondLevelColumn).getValue();
          var filteredOptions = options.filter(function(o){ return o[0] === firstlevelColValue && o[1] === secondlevelColValue && o[2] === val });
          var listToApply = filteredOptions.map(function(o){ return o[3] });
          var cell = ws.getRange(r, fourthLevelColumn);
          applyValidationToCell(listToApply,cell);
        }

}



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

缺少右括号。 这应该消除语法错误:

if (!(only.includes(e.range.getSheet().getName()))) {
   return;
   }

小费:

如果您将 cursor 放在符号之前或之后,Apps 脚本 IDE 会告诉您是否缺少右括号/括号。 此外,IDE 还会用红色下划线标记下一个括号,表示上一个语句尚未完全关闭。

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM