validation - 在 Google 表格中使用多选下拉菜单进行数据验证
问题描述
我对谷歌脚本的经验很少,但是我需要创建一个谷歌表格,使用数据验证来限制通过“多选”下拉列表输入特定列的内容。谷歌表格有一个内置的数据验证功能,允许从下拉列表中选择一个“单一”选项,但是我需要我的谷歌表格来允许从一个受限制的选项列表中为一个单元格选择多个选项。
浏览 Internet 后,我找到了该作业的 Google 脚本(网站链接在这里),但是,当我将此脚本应用到我的电子表格时,我收到以下错误消息。
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);
}
}
}
}
}
我很想听听关于脚本可能存在的问题的想法。
解决方案
试试这种方式:
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);
}
}
}
}
}
这是它现在正在做什么的一个小动画。
推荐阅读
- flutter - 如何创建具有内阴影和渐变填充的卡片
- reactjs - 对于 React 项目,@emotion/react 比 @emotion/css 有什么好处?
- python - 尝试导入时没有名为“PyPDF2”的模块
- apache - Htaccess 将子文件夹重写为子域
- python - 在 gcloud -django 上上传图片时没有名为“config”的模块
- sapui5 - 预期为 '}' 而在表达式中看到 '='
- java - 使用 Canvas 正确绘制点
- cordova - 科尔多瓦 - 状态栏中的图像
- scala - 如何在 play framework 2.5 中将 DBApi 注入到 trait 组件中?
- c# - 如何在后台运行异步任务?