我一直在寻找一段时间并试图合作一个来自各种答案主题的脚本,这将允许我根据输入的数据调整相邻的单元格内容。我似乎无法让它正常工作,并需要一些帮助指导船舶正确的方向。以下是我要完成的任务:
- 如果单元格A2:A的值是六位数字,则单元格D2:D(同一行)的值是" MATCH"那么单元格B2:B的值应设置为" ANN" - 如果单元格A2:A的值是六位数字,则单元格D2:D(同一行)的值是" NO MATCH"那么单元格B2:B的值应设置为" ANN"并且[' ANN' RNW']的下拉数据验证列表填充了列表的默认值设置为" ANN" - 如果单元格A2:A的值的长度为7或更大,则下拉数据验证列表为[' 1DY',' RNW',' NEW']填充列表的默认值设置为" 1DY"
是否可以将数据验证单元格的值设置为特定的默认值?这很重要,因为当用户输入数据时,他们很可能会接受默认值。如果他们不想要默认值,那么他们可以从下拉列表中选择一个值。
我构建了一个测试表,显示了在A列中填写数据时表单应该是什么样子以及B列中的相关值。
我的测试在这里:https://docs.google.com/spreadsheets/d/1p8sq63S-vSU1FKFLjtr2ZypItN5viXotoZL0Ki2PoQM/edit?usp=sharing
这是我试图构建的拼凑在一起的脚本(我也觉得很有趣)。这是我第一次试图让Google脚本在电子表格上运行。
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var aSheet = ss.getActiveSheet();
var aCell = aSheet.getActiveCell();
var aColumn = aCell.getColumn();
var aRow = aCell.getRow();
//var licenseStatus = aSheet.getRange(aRow, aColumn+9).getValue();
// The row and column here are relative to the range
// getCell(1,1) in this code returns the cell at B2, B2
var licenseTypeCell = aSheet.getRange(aRow, aColumn+1);
if (aColumn == 1 && aSheet.getName() == 'Onsite') {
if (isnumber(aCell) && (len(aCell) <= 6)) {
var rule = SpreadsheetApp.newDataValidation().requireValueInList(['ANN','RNW']).build();
licenseTypeCell.setValue("ANN");
licenseTypeCell.setDataValidation(rule);
} else {
var rule = SpreadsheetApp.newDataValidation().requireValueInList(['1DY','RNW','NEW']).build();
licenseTypeCell.setValue("1DY");
licenseTypeCell.setDataValidation(rule);
}
}
}
非常感谢任何帮助/指导。
答案 0 :(得分:0)
你走在正确的轨道上,几乎没有什么微小变化。您将在下面找到代码中使用的一些新功能。
1)getValue()您使用var aCell = aSheet.getActiveCell()
获取您的单元格,即已编辑的单元格。但要获得单元格的值,您需要执行以下aValue = aCell.getValue()
2)isNaN()检查aValue(如上所述)是否为数字。您将使用名为isNaN(aValue)
的函数。 Google脚本使用javascript平台,因此我们需要使用javascript中的函数。这与您在Google电子表格中使用的内置函数不同。如果值为非数字(NAN),则返回 True 。因此,我们使用not运算符(!
)来翻转返回值,如此
if(!isNaN(aValue))
3)位数谷歌脚本中没有len功能,因此要确定该数字是否为6位数,您可以执行以下操作
if(aValue < 1000000)
您的最终代码将如下所示:
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var aSheet = ss.getActiveSheet();
var aCell = aSheet.getActiveCell();
var aColumn = aCell.getColumn();
var aRow = aCell.getRow();
//var licenseStatus = aSheet.getRange(aRow, aColumn+9).getValue();
// The row and column here are relative to the range
// getCell(1,1) in this code returns the cell at B2, B2
var licenseTypeCell = aSheet.getRange(aRow, aColumn+1);
var aValue = aCell.getValue()
if (aColumn == 1 && aSheet.getName() == 'Main') {
if (!isNaN(aValue) && aValue < 1000000) {
var matchCell = aSheet.getRange(aRow, aColumn+3).getValue()
//The above gets value of column D (MATCH or NO MATCH)
if(matchCell == "MATCH"){ //Check if Col D is MATCH
licenseTypeCell.setValue("ANN");
}
else{
var rule = SpreadsheetApp.newDataValidation().requireValueInList(['ANN','RNW']).build();
licenseTypeCell.setValue("ANN");
licenseTypeCell.setDataValidation(rule);
}
} else {
var rule = SpreadsheetApp.newDataValidation().requireValueInList(['1DY','RNW','NEW']).build();
licenseTypeCell.setValue("1DY");
licenseTypeCell.setDataValidation(rule);
}
}
}
另外,请注意添加以下行以检查col D值
var matchCell = aSheet.getRange(aRow, aColumn+3).getValue()
//The above gets value of column D (MATCH or NO MATCH)
if(matchCell == "MATCH"){ //Check if Col D is MATCH
licenseTypeCell.setValue("ANN");
}