2017-01-12 62 views
0

我使用:数据验证脚本

function datavalidation(event) { 
    var ColA = 1; 
    var changedRange = event.source.getActiveRange(); 
    if (changedRange.getColumn() == ColA) { 
    var destinationRange = event.source.getActiveSheet().getRange(changedRange.getRow(),ColA+1); 

    var sourceRange = event.source.getActiveSheet().getRange(changedRange.getRow(),ColA+2,changedRange.getColumn(),10); 
    var rule = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange).build(); 
    var rules = destinationRange.getDataValidations(); 
    for (var i = 0; i < rules.length; i++) { 
    for (var j = 0; j < rules[i].length; j++) { 
    rules[i][j] = rule; 
    } 
} 
destinationRange.setDataValidations(rules); 
} 
} 

塔1被编辑时创建在第2栏的下拉菜单。它在大多数情况下工作正常,但是当我从列2中删除任何数据验证时,它正在做一些意想不到的事情。当我这样做时,它可能永远不会,它会在第2列的第一行上运行脚本,即使我做了不要更改第1列。只是试图了解这里发生了什么。由于

见公开文档浏览:https://docs.google.com/spreadsheets/d/1kYncT7bOYWp73yr3Lh4LQreTpRFc8lZL3siqpP4xsvA/edit?usp=sharing

+0

我建议你检查这[资料验证(https://developers.google.com/apps-script/reference/spreadsheet/data-validation)和[DataValidationBuilder(https://developers.google .com/apps-script/reference/spreadsheet/data-validation-builder)来了解验证如何在你的代码中工作。它提供了一些示例代码来了解如何使用它。对于有关下拉菜单的问题,请尝试检查这些问题[数据验证使用应用程序脚本](http://stackoverflow.com/questions/17686068)和[在Google表格中依赖下拉菜单?](http://stackoverflow.com/questions/21744547)如果它可以帮助你。 – KENdi

+0

感谢您的建议。虽然这个脚本似乎在我的测试表中工作,但在其他工作表中不起作用。数据valadation部分是正确的,但我认为主要问题是这样的:“.getRange(changedRange.getRow(),ColA + 2,changedRange.getColumn(),10);”我相信我需要使用不同的方法来设置源范围。 – user2969867

回答

0

设置源范围的方法是不正确的。

function datavalidation(event) { 
    var ColA = 1; 
    var changedRange = event.source.getActiveRange(); 
    if (changedRange.getColumn() == ColA) { 
    var destinationRange = event.source.getActiveSheet().getRange(changedRange.getRow(),ColA+1); 

    var sourceRange = event.source.getActiveSheet().getRange(changedRange.getRow(),2,1,10); 
    var rule = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange).build(); 
    var rules = destinationRange.getDataValidations(); 
    for (var i = 0; i < rules.length; i++) { 
    for (var j = 0; j < rules[i].length; j++) { 
    rules[i][j] = rule; 
    } 
} 
destinationRange.setDataValidations(rules); 
} 
}