Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用谷歌应用程序脚本的动态相关下拉列表不起作用-谷歌工作表_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 使用谷歌应用程序脚本的动态相关下拉列表不起作用-谷歌工作表

Google apps script 使用谷歌应用程序脚本的动态相关下拉列表不起作用-谷歌工作表,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我写了一些代码,应该在显示“分支”的一列中使用一个值,并在此基础上更改“分配给OE”中的下拉菜单(对于上下文,OE是员工),因此可以从下拉列表中选择OE名称,基于他们所在的分支。该列表将仅显示来自相应分支机构的员工 这是我的电子表格副本,清除了不相关的列: 销售订单表的A列是我希望在每行中显示下拉列表的位置,OE名称表是OE(员工)列表的位置,下拉列表应根据分支机构使用这些列填充 我写的剧本是: function onEdit() { var app = SpreadsheetApp; var

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

这是我的电子表格副本,清除了不相关的列:

销售订单表的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);

}

}
}
这个脚本似乎没有任何作用,但我不明白为什么


谢谢

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

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

var ss = app.openById("1UM[MASK]0M");
我建议使用以下方法,以便复制工作表不会破坏代码:

var ss = SpreadsheetApp.getActiveSpreadsheet();
(2) 在下一行中,您将“图纸名称”与“图纸对象”进行比较

相反,请尝试:

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);

makeIndex
未定义。因此,
if(makeindex)
循环中的整个代码将不会执行。哦,是的,我刚刚将其更改为OEnamesIndex,但它仍然不起任何作用,因此我更新了关于我的问题的代码。奇怪的是,它以前运行时没有显示错误。请将执行记录复制到您的问题中。非常感谢,当您手动将新结果键入分支列时,现在就可以这样做了。但是,通过来自另一个电子表格的脚本进入分支列的新数据不会触发onEdit。是否有一种方法可以使下拉列表在相应的分支列中出现新数据时自动显示。再次感谢,你帮了我大忙!如果您看到文档,
onEdit()
仅针对手动/用户更改运行,而不是脚本更改。一个修复方法可能是设置一个基于时间的触发器,定期检查数据并更新下拉列表。是的,我明白了,你知道有什么修复方法会在向该列添加任何新值时触发函数吗?
activeCell.offset(0, 1).setDataValidation(validationRule);