1

我正在使用 Col A、B 和 C。Col A 包含 AE,Col B 包含 1、a、3、b、5,而 Col C 将是我存储重复信息的位置(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
                }
            }
        }
    }
}
4

1 回答 1

0

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

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

所以这就是我们最终的结果。没有内置的transpose(),所以我已经包含了一个。当我们搜索匹配项时C,使用内置Array.push()方法将结果存储在 Array 中。最后,arrayC被视为一个二维数组,转置并写入 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]; }); });
}
于 2013-06-03T18:21:30.417 回答