Google 表格 - 根据多个单元格值更改单元格值的脚本
Google Sheets - Script to change cell value based on several cells values
我已经搜索了一段时间,并尝试从各种已回答的主题中编写一个脚本,使我能够根据输入的数据调整相邻单元格的内容。我似乎无法让它正常工作,需要一些帮助来引导船舶正确的方向。这是我想要完成的:
--如果单元格 A2:A 的值是六位数字且单元格 D2:D(同一行)的值是 "MATCH",则单元格 [=39] 的值=] 应设置为 "ANN"
--如果单元格 A2:A 的值是一个六位数字并且单元格 D2:D 的值(同一行)是 "NO MATCH" 那么应该设置单元格 B2:B 的值"ANN" 和 ['ANN','RNW'] 的下拉数据验证列表填充列表的默认值设置为 "ANN"
--如果单元格 A2:A 的值的长度为七个或更多字符,则 ['1DY','RNW','NEW'] 的下拉数据验证列表将使用默认值填充列表的值设置为“1DY”
甚至可以将数据验证单元格的值设置为特定的默认值吗?这很重要,因为当用户输入数据时,他们很可能会接受默认值。如果他们不想要默认值,则可以 select 从下拉列表中选择一个值。
我构建了一个测试 sheet,它显示了在 A 列中填写数据并在 B 列中填写相关值时 sheet 应该是什么样子。
我的测试在这里:https://docs.google.com/spreadsheets/d/1p8sq63S-vSU1FKFLjtr2ZypItN5viXotoZL0Ki2PoQM/edit?usp=sharing
这是我试图构建的拼凑脚本(我也觉得很有趣)。这是我第一次尝试将 Google 脚本改成 运行 的传播 sheet。
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);
}
}
}
任何 help/guidance 将不胜感激。
您走在正确的轨道上,稍作改动。您将在下面找到一些要在您的代码中使用的新函数。
1) getValue() 您使用 var aCell = aSheet.getActiveCell()
获取您的单元格,即已编辑的单元格。但是要获取单元格的值,您需要执行以下操作 aValue = aCell.getValue()
2) isNaN() 检查 aValue(如上所述)是否为数字。您将使用一个名为 isNaN(aValue)
. Google script uses javascript platform and hence we need to use functions from javascript 的函数。这与您在 google 电子表格中使用的内置函数不同。它 returns True 如果值为 Not A Number(NAN)。因此,我们使用非运算符 (!
) 来翻转 return 值,就像这样
if(!isNaN(aValue))
3) 位数 google 脚本中没有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);
}
}
}
另外,请注意添加以下行以检查列 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");
}
我已经搜索了一段时间,并尝试从各种已回答的主题中编写一个脚本,使我能够根据输入的数据调整相邻单元格的内容。我似乎无法让它正常工作,需要一些帮助来引导船舶正确的方向。这是我想要完成的:
--如果单元格 A2:A 的值是六位数字且单元格 D2:D(同一行)的值是 "MATCH",则单元格 [=39] 的值=] 应设置为 "ANN" --如果单元格 A2:A 的值是一个六位数字并且单元格 D2:D 的值(同一行)是 "NO MATCH" 那么应该设置单元格 B2:B 的值"ANN" 和 ['ANN','RNW'] 的下拉数据验证列表填充列表的默认值设置为 "ANN" --如果单元格 A2:A 的值的长度为七个或更多字符,则 ['1DY','RNW','NEW'] 的下拉数据验证列表将使用默认值填充列表的值设置为“1DY”
甚至可以将数据验证单元格的值设置为特定的默认值吗?这很重要,因为当用户输入数据时,他们很可能会接受默认值。如果他们不想要默认值,则可以 select 从下拉列表中选择一个值。
我构建了一个测试 sheet,它显示了在 A 列中填写数据并在 B 列中填写相关值时 sheet 应该是什么样子。
我的测试在这里:https://docs.google.com/spreadsheets/d/1p8sq63S-vSU1FKFLjtr2ZypItN5viXotoZL0Ki2PoQM/edit?usp=sharing
这是我试图构建的拼凑脚本(我也觉得很有趣)。这是我第一次尝试将 Google 脚本改成 运行 的传播 sheet。
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);
}
}
}
任何 help/guidance 将不胜感激。
您走在正确的轨道上,稍作改动。您将在下面找到一些要在您的代码中使用的新函数。
1) getValue() 您使用 var aCell = aSheet.getActiveCell()
获取您的单元格,即已编辑的单元格。但是要获取单元格的值,您需要执行以下操作 aValue = aCell.getValue()
2) isNaN() 检查 aValue(如上所述)是否为数字。您将使用一个名为 isNaN(aValue)
. Google script uses javascript platform and hence we need to use functions from javascript 的函数。这与您在 google 电子表格中使用的内置函数不同。它 returns True 如果值为 Not A Number(NAN)。因此,我们使用非运算符 (!
) 来翻转 return 值,就像这样
if(!isNaN(aValue))
3) 位数 google 脚本中没有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);
}
}
}
另外,请注意添加以下行以检查列 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");
}