早上好,
我需要为Google表格编写一个脚本,该脚本检查行中的单元格是否包含值,它将向该行的列写入值。例如,如果第2行第2列的单元格中的值不是“”,则在第2行第C列的单元格中写“新问题”。到目前为止,我有以下内容:
// Purpose: To populate cell in Column G if another in row cell contains
// something other than null, or ""
function formatSpreadsheet() {
var sheet = SpreadsheetApp.getActive();
var data = sheet.getRange("C3:1000").getValues();
if (data !== "") {
sheet.getRange("G3:G1000").setValue("New Issue");
}
}
与此有关的问题是,如果在C3-C1000中找到一个值,则它将“ New Issue”写入到G3-G1000范围内的所有单元格中。我需要它只将其写入相应行的位置。因此,如果C4具有值,则G4应设置为“新问题”,而C5具有值,则G5应设置为“新问题”,等等。
希望这是有道理的,我可以尝试尽可能多地清除它。我不知道“ IF语句”在这种情况下是否有帮助,或者每个循环是否需要a。我可悲的是我不知道该如何使用。谢谢您的帮助!
答案 0 :(得分:1)
针对此请求的Apps脚本解决方案需要检查每个数组索引,并写入其他范围内的相应索引。为了最大程度地提高速度,我们希望尽可能使用批处理getValues()
和setValues
。一种可能的解决方案如下所示:
function setNewIssueLabels() {
const sourceRangeA1 = "C3:C1000", destStart = "G3";
const sheet = SpreadsheetApp.getActive().getActiveSheet(),
source = sheet.getRange(sourceRangeA1).getValues();
if (!source.length || source[0].length !== 1)
throw new Error("Expected single-column source range with at least 1 row");
// Include the original row index in the array.
const inputs = source.map(function (row, index) {
row.unshift(index);
return row;
})
// Keep rows where the 2nd index (the original content) is not a null string.
.filter(function (iRow) {
return iRow[1] !== "";
});
var dest = sheet.getRange(destStart);
if (dest.getNumRows() < source.length)
dest = dest.offset(0, 0, source.length, 1)
const outputs = dest.getValues();
// For every row in 'inputs' (read: every row in the source range that
// has a value), do stuff.
inputs.forEach(function (iRow) {
var originalIndex = iRow[0];
// var originalContent = iRow[1];
// var isActualNewIssue = outputs[originalIndex] === "";
// if (isActualNewIssue) {
outputs[originalIndex] = "New Issue";
// } else {
// foo();
// }
});
/**
* Overwrite the contents of the destination range with the 'outputs' values,
* which will be whatever was previously there, and possibly additional
* cells with "new Issue"
*/
dest.setValues(output);
}
我添加并注释了一些逻辑,以确定该值在上一次调用该函数时是否存在,或者该值是否为真正的新值。
答案 1 :(得分:0)
结果证明一个简单的公式无需脚本即可自行完成。
“ = ArrayFormula(if(len(C2:C),” New Issue“,))”就够了。