我编写了一些代码,该代码应该在显示“分支”的一列中使用一个值,并基于此更改“分配给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);
}
}
}
这个脚本似乎什么也没做,但是我不知道为什么。
谢谢
答案 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);