使用Google Apps脚本的动态相关下拉列表不起作用-Google表格

时间:2019-08-30 10:12:55

标签: google-apps-script google-sheets

我编写了一些代码,该代码应该在显示“分支”的一列中使用一个值,并基于此更改“分配给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);

}

}
}

这个脚本似乎什么也没做,但是我不知道为什么。

谢谢

1 个答案:

答案 0 :(得分: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);