javascript - 需要帮助循环 3 个循环以在 Google 脚本中附加数据

标签 javascript google-apps-script google-sheets

我正在使用 Col A、B 和 C。Col A 包含 A-E,Col B 包含 1、a、3、b、5,Col 将是我存储重复信息的位置(a 和 b 将进入 C1和C2)。任何帮助,将不胜感激。总之;比较A和B的相似度,将结果输出到C

function appendString() {
    var range = SpreadsheetApp.getActiveSheet().getRange("A1:A5");
    var range2 = SpreadsheetApp.getActiveSheet().getRange("B1:B5");
    var range3 = SpreadsheetApp.getActiveSheet().getRange("C1:C5")
    var numRows = range.getNumRows();
    var x = 0


    // var numCols = range.getNumColumns();
    j = 1 // row A
    k = 2 // row B
    m = 3 // row C
    n = 1
    // First loop though B
    for (var i = 1; i <= numRows; i++) {
        // set the current value...
        var currentValue = range.getCell(i, j).getValue();
        // In the log tell us the current value
        Logger.log("Set A:" + currentValue);
        // Loops though col B to compare to col A
        for (var l = 1; l <= numRows; l++) {
            // Sets the current value to compare value
            var compareValue = range2.getCell(l, j).getValue();
            Logger.log("Set B:" + compareValue)
            // If the compareValue and the currentValue (match)
            if (compareValue === currentValue) {
                Logger.log("MATCHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH");
                // We will write the result to col C down one row
                for (n; n <= x; n++) {
                    // this makes it only run once'
                    range3.setValue(currentValue);
                    Logger.log("Appending.................");
                    x = n + 3
                }
            }
        }
    }
}

最佳答案

我认为您的问题陈述可以归结为:用 A 列和 B 列中都出现的唯一值列表填充 C 列。

有一个内置的 javascript Array 方法 Array.indexOf(),可以非常轻松地搜索匹配元素。当问题定义时,我们想要在一列中搜索,因此要使用该方法,我们需要将一列表示为数组。 Range.getValues() 方法允许我们一次加载整个范围的值,并将它们作为二维数组传递,以行作为第一个维度。我们需要那里的列,我们可以通过矩阵转置来实现。

这就是我们最终得到的结果。没有内置的 transpose(),所以我添加了一个。当我们搜索匹配项时,结果将使用内置的 Array.push() 方法存储在数组 C 中。最后,数组 C 被视为二维数组,进行转置,并写出到 C 列中的工作表中。

function recordMatches() {
  var range = SpreadsheetApp.getActiveSheet().getRange("A1:B5");
  var data = range.getValues();

  // For convenience, we'll transpose the data, so
  // we can treat columns as javascript arrays.
  var transposed = transpose(data);
  var A = transposed[0],
      B = transposed[1],
      C = [];

  // Go through A, looking for matches in B - if found, add match to C
  for (var i=0; i < A.length; i++) {
    if (B.indexOf(A[i]) !== -1) C.push(A[i]);
  }

  // If any matches were found, write the resulting array to column C
  if (C.length > 0) {
    var rangeC = SpreadsheetApp.getActiveSheet().getRange(1,3,C.length);
    rangeC.setValues(transpose([C]));
  }
}

function transpose(a) {
  return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}

关于javascript - 需要帮助循环 3 个循环以在 Google 脚本中附加数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16890555/

相关文章:

javascript - 基于 javascript 提示值的 ASP.NET 按钮点击

javascript - 使用 Google 脚本重置范围

google-apps-script - 在谷歌脚本中动态生成范围

javascript - 循环遍历单元格范围寻找值

javascript - Google 应用程序脚本,不能包含 css

javascript - 捕获用于自动化测试的浏览器 JS 控制台输出

javascript - 悬停时在后台移动节点

google-apps-script - appmaker 中的 Accordion

google-analytics - 谷歌分析电子表格附加触发器

javascript - SilverStripe/Entwine Hook 操作保存按钮