我已经编写了一个onEdit函数,该函数创建一个下拉列表,该列表根据在同一行的G列中输入的相邻值而变化。
代码是:
function onEdit() {
var app = SpreadsheetApp;
var ss = app.getActiveSpreadsheet();;
var OEsheet = ss.getSheetByName("OE names");
var SOsheet = ss.getSheetByName("Sales Order");
var activeCell = SOsheet.getActiveCell();
if(activeCell.getColumn() == 7 && activeCell.getRow() > 1 && ss.getSheetName() == "Sales Order") {
activeCell.offset(0, -6).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);
}
}
}
此脚本可以完美运行,但是问题是添加到我的电子表格G列的数据将通过脚本而不是手动添加,因此我选择将此功能与另一个功能合并,从而触发创建数据验证触发前一个脚本时,而不是手动编辑时,整个A列都将显示。因此,我将代码更改为此(将与以前的功能合并):
function DropDowns() {
var app = SpreadsheetApp;
var ss = app.getActiveSpreadsheet();;
var OEsheet = ss.getSheetByName("OE names");
var SOsheet = ss.getSheetByName("Sales Order");
var DDcolumn = SOsheet.getRange("A2:A");
var Bcolumn = SOsheet.getRange("G2:G");
Bcolumn.clearContent().clearDataValidations();
var OEnames = OEsheet.getRange(1, 1, 1, OEsheet.getLastColumn()).getValues();
var OEnamesIndex = OEnames[0].indexOf(Bcolumn.getValue()) + 1;
if(OEnamesIndex != 0){
var validationRange = OEsheet.getRange(2, OEnamesIndex, OEsheet.getLastRow());
var validationRule = app.newDataValidation().requireValueInRange(validationRange).build();
DDcolumn.setDataValidation(validationRule);
}
}
但是,这不能正常工作-它为整个列创建数据验证(这是我想要的),但是它没有使用同一行的相邻列中的值来创建此数据验证(因为我必须删除activeCell功能,因为我认为不会手动输入数据)。现在,它似乎只使用OE名称表中的A列来为行创建数据验证,而不是使用OE表中与Sales Orders表的G列中的值相对应的列。
这是指向我的电子表格副本的链接,其中删除了所有不相关的脚本和数据:https://docs.google.com/spreadsheets/d/1bligSkSDr0dtU3Zwj1c-SasvKbHqX-QhbM8zysIvM-Q/edit?usp=sharing
如何解决此问题,以便脚本运行并将下拉列表添加到整个列中,但是这些列表的内容仍然根据G列中的相邻值而改变?
谢谢