【问题标题】:Data Validation with Multi-Select Dropdown in Google Sheets在 Google 表格中使用多选下拉菜单进行数据验证
【发布时间】:2021-01-23 23:50:54
【问题描述】:

我对 Google 脚本的经验很少,但是我需要创建一个 Google 表格,该表格使用数据验证来限制通过“多选”下拉列表输入特定列的内容。 Google 表格具有内置的数据验证功能,允许从下拉列表中选择“单个”选项,但我需要我的 Google 表格以允许从受限选项列表中为单元格选择多个选项。

浏览 Internet 后,我​​找到了该作业的 Google 脚本(链接HERE 用于网站)但是,当我将此脚本应用到我的电子表格时,我收到以下错误消息。

TypeError:无法读取未定义的属性“值” onEdit@Code.gs:7

下面是我一直在使用的脚本。

function onEdit(e) {
var oldValue;
var newValue;
var ss=SpreadsheetApp.getActiveSpreadsheet();
var activeCell = ss.getActiveCell();
if(activeCell.getColumn() == 7  && ss.getActiveSheet().getName()=="Daniel") {
newValue=e.value;
oldValue=e.oldValue;
if(!e.value) {
activeCell.setValue("");
}
else {
if (!e.oldValue) {
activeCell.setValue(newValue);
}
else {
if(oldValue.indexOf(newValue) <0) {
activeCell.setValue(oldValue+'|'+newValue);
}
else {
activeCell.setValue(oldValue);
}
}
}
}
}

我很想听听有关脚本可能存在的问题的想法。

【问题讨论】:

  • 如果没有触发器,您将无法运行这些函数,该触发器提供放置在通常选择为 e 的函数参数内的事件对象。
  • 感谢@Cooper 的快速回复。我的印象是每次用户对电子表格进行编辑时都会触发 onEdit() 函数。我已经运行了这个脚本并为电子表格中的几个单元格选择了值。但是,它仍然不允许我选择多个选项。
  • 动画是否如您所愿?

标签: validation google-apps-script google-sheets


【解决方案1】:

试试这个方法:

function onEdit(e) {
  const sh = e.range.getSheet();
  if (e.range.columnStart == 7 && sh.getName() == "Daniel") {
    if (!e.value) {
      e.range.setValue("");
    }
    else {
      if (!e.oldValue) {
        e.range.setValue(e.value);
      }
      else {
        if (e.oldValue.indexOf(e.value) < 0) {
          e.range.setValue(e.oldValue + '|' + e.value);
        }
        else {
          e.range.setValue(e.oldValue);
        }
      }
    }
  }
}

请记住,您不能只从菜单或脚本编辑器中运行此类函数。如果你没有做任何需要权限的事情,那么你可以用一个简单的触发器来运行它。如果您正在执行需要权限的操作,那么您必须选择除 onEdit 之外的名称并使用可安装的触发器。

试着把它放在一张空白的 Sheet1 上并设置第 7 列有一个下拉菜单。在更改第 7 列时,您将能够看到事件对象中的值显示在单元格 A1 中。您还会看到该函数何时工作,因为它会在工作表中显示一个 toast。

function onEdit(e) {
  e.source.toast('entry');
  const sh = e.range.getSheet();
  sh.getRange(1,1).setValue(JSON.stringify(e));
  if (e.range.columnStart == 7 && sh.getName() == "Sheet1") {
    if (!e.value) {
      e.range.setValue("");
    }
    else {
      if (!e.oldValue) {
        e.range.setValue(e.value);
      }
      else {
        if (e.oldValue.indexOf(e.value) < 0) {
          e.range.setValue(e.oldValue + '|' + e.value);
        }
        else {
          e.range.setValue(e.oldValue);
        }
      }
    }
  }
}

这是一个关于它现在正在做什么的小动画。

【讨论】:

    猜你喜欢
    • 2013-12-22
    • 2019-01-10
    • 2012-12-03
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    相关资源
    最近更新 更多