这个过程需要 5 个步骤;循环、if/else 语句、JavaScript 算术、比较运算符,最后将数据写回工作表。对于您的行值,假定您有一个不应在计算中使用的标题行(冻结或其他)。
您可以在此处找到有关 JavaScript 运算符、算术和通用语言的精彩指南:
http://www.w3schools.com/js/default.asp
第 1 步:循环和一般变量定义
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range = sheet.getActiveRange();
var lastRow = sheet.getLastRow();
var checkColumn = sheet.getMaxColumns();
var checkRange = sheet.getRange(2, checkColumn, (lastRow - 1), 1);
var check = checkRange.getValues();
var red = "#ff0404";
var green = "#3bec3b";
您会注意到.getRange 方法使用编号的行和列来定义起始位置,然后使用 索引 来定义要包含的行/列数。 .lastRow 给出了一个数值,我们需要在该数值上减去 1 作为索引值。
我还使用了一种循环技术,包括显示哪些单元格已被处理。这允许您使用所需的逐行结构,同时还可以查明可能发生错误的位置。
for (var i = 0; i < check.length; i++) {
这是循环的基本结构。我们有一个索引 i,我们在每次循环后递增。最常见的索引是“i”,但也可以使用其他变量。如果您在循环中循环,更改索引的名称也是一个好习惯。
第 2 步:If/Else 语句
if (check[i] == "✓") {
continue;
} else {
var checkCell = sheet.getRange((i+2), checkColumn, 1, 1);
function sorter() {
var number = sheet.getRange((i+2), 1, 1, 1).getValue();
var sqrtCell = sheet.getRange((i+2), 2, 1, 1);
var moreCell = sheet.getRange((i+2), 3, 1, 1);
var lessCell = sheet.getRange((i+2), 4, 1, 1);
var outputCell = sheet.getRange((i+2), 5, 1, 1);
我们设置了要检查的条件if (check[i] == "✓") {,并设置了要执行的操作continue,。这基本上意味着如果我们已经设置了该行已处理的标记,请跳过它并检查下一个。 check[i] 使用我们设置的索引循环遍历所有值以查找“✓”。
之后,如果语句为假,我们设置一个替代方案。这是代码的核心,处理数字并写入数据。 .getRange 方法都是为了准确定义在哪里看和在哪里写。
第 3 步:算术
var squareRoot = Math.sqrt(number);
sqrtCell.setValue(squareRoot);
这些是 JavaScript 方法,不会在 GAS 参考中显示,因为它们是 JavaScript 本身的组成部分。您可以参考 w3schools 了解更多信息。至此,我们已经以编程方式找到了平方根,并将值写回到之前定义的单元格中。
第 4 步和第 5 步:运算符和写入值
if (squareRoot >= 10) {
moreCell.setValue(number);
outputCell.setValue("Select");
outputCell.setBackground(green);
} else {
lessCell.setValue(number);
outputCell.setValue("Reject");
outputCell.setBackground(red);
}
这是另一个使用运算符作为条件的 if/else 语句。这次我们检查 sqrt 变量并使用运算符>= 来表示大于或等于。如果我们发现该陈述为真,则将原始数字写入一列,将另一列标记为“选择”并将该标签设为绿色。如果我们发现该陈述是错误的,将原始数字写入不同的列,标记“拒绝”,并将标记变为红色。
我们通过告诉它首先将检查单元格变为红色来完成代码,然后计算数字,然后重置背景并写下我们的外延标记。
}
checkCell.setBackground(red);
sorter();
checkCell.setBackground('white');
checkCell.setValue("✓");
}
}
}
您可以根据自己的喜好制作任何标记,并且可以使用不同的 CSS 颜色格式轻松标记您选择的单元格。您告诉代码执行的顺序至关重要。注意经常测试,并确保事情发生在你告诉他们的时间和方式。
您会注意到,我们首先定义了sorter() 函数是什么,然后依次调用它。这样可以确保它在我们需要时真正正确运行。
我还建议研究onEdit() 和时间触发器,以便在进行编辑/添加值时或在设定的时间间隔内自动运行。
完整的代码和参考图片已包含在下面。
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range = sheet.getActiveRange();
var lastRow = sheet.getLastRow();
var checkColumn = sheet.getMaxColumns();
var checkRange = sheet.getRange(2, checkColumn, (lastRow - 1), 1);
var check = checkRange.getValues();
var red = "#ff0404";
var green = "#3bec3b";
for (var i = 0; i < check.length; i++) {
if (check[i] == "✓") {
continue;
} else {
var checkCell = sheet.getRange((i+2), checkColumn, 1, 1);
function sorter() {
var number = sheet.getRange((i+2), 1, 1, 1).getValue();
var sqrtCell = sheet.getRange((i+2), 2, 1, 1);
var moreCell = sheet.getRange((i+2), 3, 1, 1);
var lessCell = sheet.getRange((i+2), 4, 1, 1);
var outputCell = sheet.getRange((i+2), 5, 1, 1);
var squareRoot = Math.sqrt(number);
sqrtCell.setValue(squareRoot);
if (squareRoot >= 10) {
moreCell.setValue(number);
outputCell.setValue("Select");
outputCell.setBackground(green);
} else {
lessCell.setValue(number);
outputCell.setValue("Reject");
outputCell.setBackground(red);
}
}
checkCell.setBackground(red);
sorter();
checkCell.setBackground('white');
checkCell.setValue("✓");
}
}
}