我正在使用 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/