我正在尝试使用基于同一行中另一个单元格的内容创建一个下拉菜单。例如,如果A1 ='是',那么B2中的下拉菜单会为您提供“是”或“否”的选项。我可以这样做我有列表数据设置和编码工作。问题是我需要在4张不同的纸张中完成这155次。有没有比右键单击和编辑每个单元格的数据验证规则更快的方法。这是我正在研究的测试表的链接:
https://docs.google.com/spreadsheets/d/1rd_Ig_wpof9R_L0IiA1aZ9syO7BWxb6jvBhPqG8Jmm4/edit?usp=sharing
答案 0 :(得分:0)
您可以使用脚本as documented here设置数据验证规则。这是starting with Apps scripts的参考。
我写了一个大致与你所描述的相似的函数。它适用于当前电子表格中“9年级”工作表的范围B3:B157。对于它们中的每一个,它将验证规则设置为:同一行中的值,列表'列表数据'的列B和C。
的行 ....... = listData.getRange(i+3, 2, 1, 2);
如果要验证的源范围不同,则需要修改。这里的参数是:起始行,起始列,行数,列数。所以,2列以第二列开头,行编号为i + 3。
function setRules() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var grade = ss.getSheetByName('9th Grade');
var listData = ss.getSheetByName('List Data');
var range = grade.getRange('B3:B157');
var rules = range.getDataValidations();
for (var i = 0; i < rules.length; i++) {
var sourceRange = listData.getRange(i+3, 2, 1, 2);
rules[i][0] = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange).build();
}
range.setDataValidations(rules);
}
答案 1 :(得分:0)
我出于不同的原因登陆了这个问题:&#34;只需在一列&#34; 中批量复制DataValidation(或更新)。谢谢,给用户3717023带来了光明。 我希望能帮助这个简化。
function setRules() {
//select spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var leads = ss.getSheetByName('Leads');
//Select correct Datavalidation
var rangeNewDataValidation = leads.getRange('M2:M2');
var rule = rangeNewDataValidation.getDataValidations();
//Copy (or Update) Datavalidation in a specific (13 or 'M') column
var newRule = rule[0][0].copy();
Logger.log(leads.getMaxRows())
for( var i=3; i <= leads.getMaxRows(); i++){
var range = leads.getRange(i, 13);
range.setDataValidations([[newRule.build()]]);
}
}