我想使用 Google Apps 脚本动态更改 Google 电子表格的单元格验证功能中候选列表的值。
我未能使用 Google 公式功能在 Google 电子表格中创建动态下拉列表。
我想使用 Google Apps 脚本动态更改 Google 电子表格的单元格验证功能中候选列表的值。
我未能使用 Google 公式功能在 Google 电子表格中创建动态下拉列表。
您现在可以使用newDataValidation()来构建数据验证规则。
例子:
// Set the data-validation rule for cell A1 to require a value from B1:B10.
var cell = SpreadsheetApp.getActive().getRange('A1');
var range = SpreadsheetApp.getActive().getRange('B1:B10');
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(range)
.build();
cell.setDataValidation(rule);
来源:https ://gsuite-developers.googleblog.com/2013/08/answering-another-top-request-data.html
博客文章提供了一种简单的方法。我的代码启动器是
function loadMenu() {
var ga = SpreadsheetApp.getActive();
var firstMenu = 'B3:B4';
var firstValues = 'E3:F3';
var staticValue1 = 'E3';
var staticValue2 = 'F3';
var secondMenu = 'C';
var secondMenuRow = 3;
var secondMenu1 = 'E4:E';
var secondMenu2 = 'F4:F';
dynamicDrop(ga, firstMenu, firstValues, staticValue1, staticValue2, secondMenu, secondMenuRow, secondMenu1, secondMenu2);
}
function dynamicDrop(ga, fm, fv, sv1, sv2, sm, smr, sm1, sm2) {
//first drop choices
var cells = ga.getRange(fm);
var range = ga.getRange(fv);
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();
cells.setDataValidation(rule);
// set as static value
var staticVar1 = ga.getRange(sv1).getValue();
// set as static value
var staticVar2 = ga.getRange(sv2).getValue();
// set to chosen value of fm
var chosenVar1 = ga.getRange(fm).getValues();
for (var row in chosenVar1) {
for (var col in chosenVar1[row]) {
if (chosenVar1[row][col] == staticVar1) {
num = parseInt(row) + smr;
var cells = ga.getRange(sm+num);
var range = ga.getRange(sm1);
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();
cells.setDataValidation(rule);
} else if (chosenVar1[row][col] == staticVar2) {
num = parseInt(row) + smr;
var cells = ga.getRange(sm+num);
//range is Static values
var range = ga.getRange(sm2);
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();
cells.setDataValidation(rule);
}
}
}
}