【问题标题】:Dynamic dependent dropdown list using google apps script is not working - Google Sheets使用谷歌应用脚​​本的动态依赖下拉列表不起作用 - Google 表格
【发布时间】:2019-08-30 10:12:55
【问题描述】:

我编写了一些代码,该代码应该在显示“分支”的列中使用一个值,并基于此更改“分配给 OE”中的下拉菜单(对于上下文,OE 是员工),因此可以根据他们所在的分支机构从下拉列表中选择 OE 名称。该列表将仅显示来自相应分支机构的员工。

这是我的电子表格的副本,已清除不相关的列:https://docs.google.com/spreadsheets/d/1dzTYQL1YPX6z6qtV4_tNl4ntBMLqcMQYoPcw6cKuyAw/edit?usp=sharing

销售订单表的 A 列是我希望每一行中的下拉列表的位置,OE 名称表是 OE(员工)列表所在的位置,下拉列表应填充这些列取决于分支。

我写的脚本是:

function onEdit() {

var app = SpreadsheetApp;
var ss = app.openById("1UM[MASK]0M");
var OEsheet = ss.getSheetByName("OE names");
var SOsheet = ss.getSheetByName("Sales Order");
var activeCell = SOsheet.getActiveCell();

if(activeCell.getColumn() == 1 && activeCell.getRow() > 1 && ss.getSheetName() == SOsheet) {

  activeCell.offset(0, 1).clearContent().clearDataValidations();

  var OEnames = OEsheet.getRange(1, 1, 1, OEsheet.getLastColumn()).getValues();

  var OEnamesIndex = OEnames[0].indexOf(activeCell.getValue()) + 1;

  if(OEnamesIndex != 0){
 var validationRange = OEsheet.getRange(2, OEnamesIndex, OEsheet.getLastRow());
 var validationRule = app.newDataValidation().requireValueInRange(validationRange).build();

  activeCell.offset(0, -6).setDataValidation(validationRule);

}

}
}

这个脚本似乎没有做任何事情,但我不知道为什么。

谢谢

【问题讨论】:

  • makeIndex 未定义。所以if(makeindex)循环内的整个代码都不会执行。
  • 哦,是的,我刚刚将其更改为 OEnamesIndex 但它仍然没有执行任何操作,因此我更新了我的问题的代码。奇怪的是它之前运行时没有显示该错误。
  • 请将执行记录复制到您的问题中。

标签: google-apps-script google-sheets


【解决方案1】:

以下是您可能需要解决的一些问题:

(1) 此行指向演示表以外的工作表。也许这是您的主工作表的 ID。我建议为这篇文章屏蔽它

var ss = app.openById("1UM[MASK]0M");

我建议使用以下方法,这样复制工作表就不会破坏代码:

var ss = SpreadsheetApp.getActiveSpreadsheet();

(2) 在下一行中,您将“工作表名称”与“工作表对象”进行比较。

if(activeCell.getColumn() == 1 && activeCell.getRow() > 1 && ss.getSheetName() == SOsheet) {

请尝试:

if(activeCell.getColumn() == 1 && activeCell.getRow() > 1 && ss.getSheetName() == "Sales Order") {

(3) 基于if 语句,活动单元格的列是1。但是这一行试图将列偏移-6 列,这是不可能的。

activeCell.offset(0, -6).setDataValidation(validationRule);

也许你的意思是:

activeCell.offset(0, 1).setDataValidation(validationRule);

【讨论】:

  • 非常感谢,当您手动在“分支”列中输入新结果时,现在可以使用了。但是,onEdit 不会由通过来自另一个电子表格的脚本进入 Branch 列的新数据触发。有没有办法让下拉列表在相应的分支列中出现新数据时自动出现。再次感谢,您帮了大忙!
  • 如果您看到文档,onEdit() 仅针对手动/用户更改运行,而不是脚本更改。一种解决方法可能是设置基于时间的触发器,定期检查数据并更新下拉菜单。
  • 是的,我明白了,您知道在向该列添加任何新值时会触发该函数的任何修复吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多