Google表格脚本读取单元格“ a”的值并根据单元格“ a”的值写入单元格“ b”

时间:2018-07-03 13:40:16

标签: javascript google-apps-script google-sheets

早上好,

我需要为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。我可悲的是我不知道该如何使用。谢谢您的帮助!

2 个答案:

答案 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“,))”就够了。