google-apps-script - 我能否获得帮助来修复相关下拉菜单的 Apps 脚本代码?
问题描述
根据以下链接,我的 Google 表格中有相关的下拉列表:
下拉列表位于“事件/事件”表中:
D 列和 E 列依赖于 C 列。这是“下拉列表”表中下拉数据的图像:
“事件/事件”表的 C 列中的下拉列表是从“下拉列表”表 A2 到 F2 的数据验证。C 列下拉列表中的选择将规定 D 和 E 列下拉列表中的标准,并且两列的数据将相同。这将从 A4 向下、B4 向下等的“下拉列表”表中获取,例如,如果选择了“Tauranga”,则 Tauranga 下的所有名称都将出现在 D & E 下拉列表中。
这是我的 onEdit 代码:
//Dependent Dropdowns for 'Event/Incidents' Sheet
{
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var tablists = 'Dropdown Lists';
var tabValidation = 'Events/Incidents';
var ss = spreadsheet.getActiveSheet();
var datass = spreadsheet.getSheetByName(tablists);
var activeCell = ss.getActiveCell();
if (
activeCell.getColumn() == 3 &&
activeCell.getRow() > 1 &&
ss.getSheetName() == tabValidation
) {
activeCell
.offset(0, 1)
.clearContent()
.clearDataValidations();
var base = datass.getRange(2, 1, 1, 5).getValues();
var baseIndex = base[0].indexOf(activeCell.getValue()) + 1;
Logger.log(baseIndex);
if (baseIndex != 0) {
//Dynamic dropdown for 'Event Recorded By'
var validationRange = datass.getRange(3, baseIndex, datass.getLastRow());
var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
activeCell.offset(0, 1).setDataValidation(validationRule);
//Dynamic dropdown for 'Employee'
var validationRange2 = datass.getRange(4, baseIndex, datass.getLastRow());
var validationRule2 = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange2).build();
activeCell.offset(0, 2).setDataValidation(validationRule2);
}
}
if (ss.getSheetName() == tabValidation) {
var lock = LockService.getScriptLock();
if (lock.tryLock(0)) {
autoid_(ss);
lock.releaseLock();
}
}
我无法让这段代码正常工作,希望能得到一些帮助。
解决方案
这是您可以在 onEdit 函数中实现的示例,这将根据在 C 列中选择的值为每行中的 D 列和 E 列创建下拉列表:
var range = e.range;
var editedRow = range.getRow();
var spreadsheet = SpreadsheetApp.getActive();
var dropdownSheet = spreadsheet.getSheetByName("Dropdown Lists");
var eventsSheet = spreadsheet.getSheetByName("Events/Incidents");
var baseSelected = eventsSheet.getRange('C' + editedRow).getValue();
var column;
switch (baseSelected) {
case 'EBOP': column = 'A'; break;
case 'Tauranga': column = 'B'; break;
case 'Palmerston North': column = 'C'; break;
case 'Kapiti': column = 'D';
}
var startCell = dropdownSheet.getRange( column +'4');
var endCellNotation = startCell.getNextDataCell(SpreadsheetApp.Direction.DOWN).getA1Notation();
var ruleRange = dropdownSheet.getRange(startCell.getA1Notation() + ':' + endCellNotation);
var dropdown1 = eventsSheet.getRange('D' + editedRow);
var dropdown2 = eventsSheet.getRange('E' + editedRow);
var rule1 = SpreadsheetApp.newDataValidation().requireValueInRange(ruleRange).build();
var rule2 = SpreadsheetApp.newDataValidation().requireValueInRange(ruleRange).build();
dropdown1.setDataValidation(rule1);
dropdown2.setDataValidation(rule2);
我使用了 DataValidation [1] 和 DataValidationBuilder [2] 类。
[1] https://developers.google.com/apps-script/reference/spreadsheet/data-validation
[2] https://developers.google.com/apps-script/reference/spreadsheet/data-validation-builder
推荐阅读
- box-api - Box:如何将文件下载到特定文件夹?
- python - 如何在没有 classmethods 但添加时不起作用的 defs 上使用 classmethods
- mongodb - Mongodb 删除孤立文件
- java - Java中的加密,而解密方法是已知的
- python - Python 请求 - 返回对 PHP 的响应
- python-3.x - ChainerCV SSD512 模型未训练
- webview - Electron - 防止 webview 访问本地文件
- ios - 添加 FCM 支持后,本地通知在 iOS 上停止工作
- pandas - 有没有办法给 to_latex() 生成的表格添加边框?
- javascript - Hapi AssertionError:无法在没有路径参数的情况下设置路径参数验证:GET