预期产出:
当我在C3:C!Sheet1中输入任何名称(来自C3:C!Sheet2)时,在D3:D!Sheet1中有一个自动动态下拉列表,其中仅包含A3:A!Sheet2中的那些语言对应于C3中的输入名称:C!Sheet1。
目前,当我输入" IndividualName"在C3:C!Sheet1中,只显示预期的输出。但我不想要" IndividualName",我想要C3:C!Sheet2中的任何名字。
以下是已发布的Google电子表格的链接,以便更好地了解我正在尝试实现的目标。 (对不起,我之前不太清楚。)
如何编辑行号。以下是Google Apps脚本中的13,而不是引用内容==" IndividualName",它指的是电子表格中sheet2中C = C列的范围。
1 function onEdit(event){
2 var ss=SpreadsheetApp.getActiveSpreadsheet()
3 var s=ss.getSheetByName("Sheet1")
4 var sheet = event.source.getActiveSheet().getName();
5 var editedCell = event.range.getSheet().getActiveCell();
6 var editVal=event.range.getSheet().getActiveCell().getValue()
7 var editRow=event.range.getSheet().getActiveCell().getRow()
8
9 var s1=ss.getSheetByName("Sheet2")///////get new sheet
10 var lr1=s1.getLastRow()//////get last row of new sheet
11
12 if(sheet=="Sheet1" && editedCell.getColumn() ==3){
13 if(editVal=="IndividualName"){
14 var validation=s1.getRange(3, 1, lr1,1)//////get column A data of new sheet
15 var cell= s.getRange(editRow,4,1,1)
16 var rule = SpreadsheetApp.newDataValidation().requireValueInRange(validation,false)
17 .setAllowInvalid(false)
18 .build();
19 cell.setDataValidation(rule);
20 }}}
感谢名单!
答案 0 :(得分:2)
如果我正确读取此内容,您需要在表单2中构建的任何输入名称旁边添加“验证”下拉列表。
为此,您需要遍历列表并返回一个可用于创建验证菜单的对象。我会做以下事情:
function newValidation() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName('Sheet1');
var sheet2 = ss.getSheetByName('Sheet2');
// Get the data from the database and the list to check against.
var sheet1Data = sheet1.getDataRange().getValues();
var sheet2Data = sheet2.getDataRange().getValues();
// Loop through any names in sheet 2
for(var i=2; i<sheet2Data.length; i++) {
var langs = [];
// loop through the database for each name
for(var j=2;j<sheet1Data.length;j++) {
// if the names match, push the corresponding value into the array
if(sheet2Data[i][2] == sheet1Data[j][2]) {
langs.push(sheet1Data[j][0]);
}
}
// Include an error if the array is empty
if(langs.length === 0) {
langs.push("No languages matched");
}
// Build the validation rule and append it to the matching row
var rule = SpreadsheetApp.newDataValidation().requireValueInList(langs).build();
sheet2.getRange(i+1, 4,1,1).setDataValidation(rule);
}
}
我在代码中将您的模板表重命名为更加友好。从脚本编辑器运行时,此脚本将检查整个工作表。你可以附加一个触发器来检查编辑的任何时间。它也可以减少到仅匹配C列上没有验证的行更快一点,但我会留给你。
您可以看到一个有效的例子in this Google Sheet。