【问题标题】:Creating a dynamic dropdown list in a google form using Javascript使用 Javascript 在谷歌表单中创建动态下拉列表
【发布时间】:2015-11-26 07:31:34
【问题描述】:

我正在为创建动态下拉列表的 Google 电子表格构建一个脚本。这是用 JavaScript 编写的,但这是我工作过的第一个,需要一些逻辑方面的帮助。

代码有效,但现在我想要的是让 B 列和 C 列依赖于 A 列中选择的类别。

下面的脚本分为三个级别:主类别、子组(依赖于主类)和子子组(依赖于子组)。

所以在我的例子中,我为多个属性标记视频内容。所以主要类别可能是“音频”,我想为同一子组中的两个项目标记它。

基本上,如何使用下面的脚本使 B 列和 C 列仅依赖于 A 列的选择?

我很确定我需要在这里调整一些东西:aColumn + 1);

    function depDrop_(range, sourceRange){
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange, true).build();
range.setDataValidation(rule);
}
function onEdit (){
var aCell = SpreadsheetApp.getActiveSheet().getActiveCell();
var aColumn = aCell.getColumn();
if (aColumn == 1 && SpreadsheetApp.getActiveSheet()){
var range = SpreadsheetApp.getActiveSheet().getRange(aCell.getRow(), aColumn + 1);
var sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue());
depDrop_(range, sourceRange);
}
else if (aColumn == 2 && SpreadsheetApp.getActiveSheet()){
var range = SpreadsheetApp.getActiveSheet().getRange(aCell.getRow(), aColumn + 1);
var sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue());
depDrop_(range, sourceRange);
}
}

【问题讨论】:

  • @pnuts - 好点子 - 我正在使用谷歌电子表格,并认为具有高级 Excel 经验的人可能会遇到类似问题并决定编写脚本。

标签: javascript function google-sheets


【解决方案1】:

这里有一些可能会有所帮助的代码。我没有测试过,但看看我做了什么;找出代码中的逻辑和改进;运行它,看看会发生什么。如果您遇到无法弄清楚的错误或意外结果,请告诉我。

function onEdit(e) { //Use the event - e
  var ss = SpreadsheetApp.getActiveSpreadsheet(); //get spreadsheet - ss
  var sh = ss.getActiveSheet(); //get sheet - sh

  var cellRng = e.range; //Range of cell that was edited

  var rowEdited = cellRng.getRow();
  var columnEdited = cellRng.getColumn();
  var range;  //define a variable for a range, and leave it undefined

  if (columnEdited === 1) {//If column one was edited, change the data validation in the next column 
    //Run the function to update the validation twice, once for column B, once for column C
    range = sh.getRange(rowEdited, columnEdited + 1); //Update Column B
    depDrop_(range, cellRng);

    range = sh.getRange(rowEdited, columnEdited + 2); //Update column C
    depDrop_(range, cellRng);
  };

  //If column 1 was not edited, then do nothing
};

【讨论】:

  • 它还活着!感谢您简化
  • 如果这解决了您的问题,请标记为正确答案。
猜你喜欢
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 2013-11-07
  • 1970-01-01
  • 2012-08-11
相关资源
最近更新 更多