Google Apps 脚本 - 无法读取未定义的属性(读取“setDataValidation”)错误

问题描述 投票:0回答:0

多级 DD 列表失败@Sheet BEP!从列表范围“工作空间!”中调用 ColA“州”、ColB“区”和 ColC“块” (ColE '州,ColF '区',ColG '街区')分别

  1. 所选DDL的实例/流程
  • 选了第一个简单的DDL!范围 BEP!ColA 从 Workspace 调用的“状态”级别!ColE 'ColE 正常
  • 对于 DDL2 选择的 BEP!A“州”通过 BEP!B“地区”从 WorkSpace 调用!ColF2:F“地区”
  • 基于 DDL2,从 BEP!A 'States' && BEP!B 'District' 中选择值,用于从 WorkSpace!ColG2:G 'Block' 调用 DDL3 BEP!C 'Block'
  1. “vrule”的 setDataValidation 似乎存在一些错误,但无法弄清楚
  • 参考所选的 BEP!A2;A6 BEPB!B2:B6 输出“NULL”)而不是 Workspace!ColF2:F6 中的值
  • 请参阅项目链接中的测试(当前状态):
  1. 以前的 Staging BEP!B2:B6 被称为数组列表,但 var ddlist = ["a","c","e","f","b","t","a","C","f","a","h"]; 的内联 ddlist; 请参考之前选择的实例 BEP!A7 BEPB!B2:B6,该实例在 Workspace!ColG7 的 DDL2 值中输出“NULL”和“内联列表”) -列表需要输出为
  • a
  • c
  • e
  • f
  • b

但是输出内联 [a,c,e,f,b,t,a,C,f,a,h] 而不是单独的列表会导致错误

在项目链接上进行测试(当前状态):

  1. “BEP!”表ColA ---> ColB 读取“WorkSpace!” ColE、ColF、ColG,但无法加载“BEP!B”(空白)中的数组列表。
  2. 日志文件生成“失败”,并出现错误,但 DDList 返回“工作空间:F”的正确值,但电子表格的回调函数失败。 云日志
  • 2023 年 7 月 23 日 6:41:55 信息 [Daman, Diu]
  • 2023 年 7 月 23 日上午 6:41:55 调试 [ 'Daman', 'Diu' ]
  • 2023 年 7 月 23 日上午 6:41:55 错误 您在单元格 B3 中输入的数据违反了在此单元格上设置的数据验证规则

错误请帮忙

项目链接:EXER1002 DDLX 多级动态相关下拉列表

视频链接:Google Apps 脚本 setDataValidation 错误第 1 部分

视频链接:Google Apps 脚本 setDataValidation 错误第 2 部分

TypeError:无法读取未定义的属性(读取“setDataValidation”) dDDLLevel2validation @ Code.gs:50

我忽略了 TypeError: e.range is not a function at onEdit(Code:23:22) https://support.google.com/docs/thread/114816490/typeerror-cannot-read-property-range-of-undefined?hl=en

代码

// WorkSheet Global function for re-use (row, col, numRows, numCols)
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("BEP");         
  var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("WorkSpace"); 
  var ddlxrange  = ws.getRange(2, 5, ws.getLastRow()-1, 3).getValues();                                           

function dDDLLevel2() {
  var ddlist  = ["a","c","e","f","b","t","a","C","f","a","h"];          // Sets Unique [array List] even if duplicate exists
  var ddcell  = ss.getRange("B2");                                      // Output DDList in inline statement in single cell
//var vrule   = SpreadsheetApp.newDataValidation().requireValueInList(ddlist).setAllowInvalid(false).build();
                 // Moved to function 'dDDLLevel2validation' rule using callback function onEdit(e)
//var ddcell  = ss.getRange("B2").setDataValidation(vrule); 
      dDDLLevel2validation(ddlist,ddcell);
}


function dDDLLevel2validation(ddlist,ddcell) {
  var vrule   = SpreadsheetApp.newDataValidation()
                              .requireValueInList([ddlist])
                              .setAllowInvalid(false)
                              .build();
                              // .setHelpText("Only valid input from Dropdown List")          // Custom HelpText for FrontEnd
  ddcell.setDataValidation(vrule);
}


// PLEASE IGNORE 'onEdit':: TypeError: Cannot read properties of undefined (reading 'range')
// Type Error:: https://support.google.com/docs/thread/114816490/typeerror-cannot-read-property-range-of-undefined?hl=en

function onEdit(e) {                                       
  var activecell = e.range;
      var cellval = activecell.getValue();
      var rowval  = activecell.getRow();
      var colval  = activecell.getColumn();
      var ssname  = activecell.getSheet().getName();
   
  // ss.getRange(rowval,2).setValue(cellval);                 // Post cellvalue (row, col) to output cell getRange --> [B2]
  //if(colval === 1) {                                        // onEdit limit to Selected SS | Col (B) && exclude headrow (>1)
   if(ssname == "BEP" && colval === 1 && rowval > 1) {        // onEdit limit to ActiveSheet | Col(B) && exclude header (>1)    
         ss.getRange(rowval,2).setValue(cellval);          // Post cellvalue (row, col) to output relative row --> [B]
    //     {ss.getRange(rowval,2).setValue(cellval);}         // Post activecellvalue (row, col) to same row of active cell
     
      var filteredrange = ddlxrange.filter(function(o)  {return o[0] === cellval} );   // WorkSpace ddLevel1 col ie; E
      var applytoddl2   = filteredrange.map(function(o) {return o[1]} );               // WorkSpace ddLevel2 col ie; F 
      // Logger.log(applytoddl2);
      // console.log(applytoddl2);
      var ddcell2    = ss.getRange(rowval,2);                    // ddl2 valued based on dDDL1
      dDDLLevel2validation(applytoddl2,ddcell2);
  }  
}

validation google-apps-script typeerror dropdown enumeration
© www.soinside.com 2019 - 2024. All rights reserved.