我想使用Google Apps脚本动态更改Google电子表格的单元格验证功能中候选列表的值。
我无法使用Google公式功能在Google电子表格中创建动态下拉列表。在Excel中,可以在Excel电子表格中使用在下拉列表功能工作的单元格中设置的INDIRECT函数,引用其值的动态设置列表范围名称的单元格。
答案 0 :(得分:3)
不幸的是,使用Apps Script管理单元格验证是不可能的。对此有一个增强request opened。你应该对其进行加星标记以跟踪更新和投票类型。
此外,Excel INDIRECT功能不适用于Google Spreadsheets。
答案 1 :(得分:1)
Times have changed see this blog post
My spreadsheet example that could use some improvements
博客发布了一个简单的方法。 我的代码启动器是
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);
}
}
}
}