通过唯一键重复/重复行

时间:2019-03-11 00:44:04

标签: google-apps-script google-sheets

在Google表格中,使用Apps脚本,我有3个表格,我希望从表格1中获取键并针对它们复制表格2中的行,以便对于每个唯一键,表格2中的每个值都将填充。参见表3作为示例输出。请注意,工作表1中的键只出现一次,但是我需要重复这些键以匹配工作表2中的行数。

有什么想法吗?

第1张:包含唯一键

Sheet 2:包含我想要相乘/重复的值

第3页:包含所需的输出。

工作表1

第2页

第3页

1 个答案:

答案 0 :(得分:3)

您可以阅读“键和值”列,并使用这些值为Sheet3创建可写行。下面的代码显示了在test函数中执行此操作的简单方法,您可以复制/粘贴并运行该函数。

function test() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s1 = ss.getSheetByName('Sheet1');
  var s2 = ss.getSheetByName('Sheet2');
  var s3 = ss.getSheetByName('Sheet3');

  // read Key column, [ [value], [value], [value]... ]
  var v1 = s1.getRange(2, 1, s1.getLastRow() - 1, 1).getValues();
  // flatten array of arrays into array, [value, value...]
  v1 = v1.map(function(el) {
    return el[0];
  });
  // read Values column, [ [value], [value], [value]... ]
  var v2 = s2.getRange(2, 1, s2.getLastRow() - 1, 1).getValues();
  // flatten array of arrays into array, [value, value...]
  v2 = v2.map(function(el) {
    return el[0];
  });

  // hold rows to insert, will become [row, row]
  var result = [];

  v1.forEach(function(k) {
    v2.forEach(function(v) {
      // create row as [k, v]
      result.push([k, v]);
    });
  });

  // get range of required length and insert values into sheet
  // 2, which row to start, 1, which col to start, result.length, how many rows, 2, how many cols
  s3.getRange(2, 1, result.length, 2).setValues(result);
}

请参见map的{​​{3}},forEach的{​​{3}},SpreadsheetApp的{​​{3}}和{{1}的this }。