验证下拉输入值

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

这是我的场景: 我有一张带有 4 个下拉菜单的 Google 表格(所有下拉菜单都相互依赖),当编辑一个下拉菜单时,我需要清理下一个下拉菜单,这个我已经有了。

但是,它不应该总是有效,只有当用户手动更改特定值时才有效。如果用户从另一个文件(同时 4 个)复制并粘贴值,则不应清除它们,除非列表中存在无效值。

这是我到目前为止的代码:

function installedOnEdit(e) {

  if(e.range.rowStart!=1) {
    // create dynamic and filtered dropdowns
    dropdown(e);

    var s = SpreadsheetApp.getActive();
    var r = s.getActiveCell();

    // clean depended dropdowns when a single cell is edited

    if( r.getColumn() == 1 ) {
      r.offset(0, 1).setValue('');
      r.offset(0, 2).setValue('');
      r.offset(0, 3).setValue('');
    }
    if( r.getColumn() == 2 ) {
      r.offset(0, 1).setValue('');
      r.offset(0, 2).setValue('');
    }
    if( r.getColumn() == 3 ) {
      r.offset(0, 1).setValue('');
    }
  }
 }

我很感谢你的帮助。 问候。

google-apps-script
1个回答
0
投票

您可以修改现有的谷歌应用程序脚本来检查该值是手动更改还是通过复制粘贴操作更改。一种方法是跟踪有效的下拉值并验证编辑的值是否是该列表的一部分。

function installedOnEdit(e) {

if (e.range.rowStart != 1) { 下拉菜单(e);

var s = SpreadsheetApp.getActive();
var r = s.getActiveCell();
var validValuesColumn1 = ["Value1", "Value2", "Value3"];
var validValuesColumn2 = ["ValueA", "ValueB", "ValueC"];
var validValuesColumn3 = ["OptionX", "OptionY", "OptionZ"]; 
var validValuesColumn4 = ["Choice1", "Choice2", "Choice3"];

var newValue = r.getValue();
var columnIndex = r.getColumn();

function isValid(value, column) {
  switch (column) {
    case 1: return validValuesColumn1.includes(value);
    case 2: return validValuesColumn2.includes(value);
    case 3: return validValuesColumn3.includes(value);
    case 4: return validValuesColumn4.includes(value);
    default: return false;
  }
}

if (columnIndex == 1) {
  if (!isValid(newValue, columnIndex)) {
    r.offset(0, 1).setValue('');
    r.offset(0, 2).setValue('');
    r.offset(0, 3).setValue('');
  }
}
if (columnIndex == 2) {
  if (!isValid(newValue, columnIndex)) {
    r.offset(0, 1).setValue('');
    r.offset(0, 2).setValue('');
  }
}
if (columnIndex == 3) {
  if (!isValid(newValue, columnIndex)) {
    r.offset(0, 1).setValue('');
  }
}

} }

© www.soinside.com 2019 - 2024. All rights reserved.