在电子表格中复制和粘贴没有重复的值

Copy and paste values without duplicates in spredsheets

我只想复制并粘贴从源范围到目标的值(不是公式),不要重复(有些值已经在目标范围内)。我尝试按照几个在线教程从复制粘贴部分开始(甚至不是唯一条件)但不断收到错误“参数(字符串,数字,数字,数字)与 [ 的方法签名不匹配=16=] ...”。真的不知道为什么,因为我使用的是相同的代码。还尝试使用 copyTo 而不是 setValues,但得到了同样的错误。

function paste() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var source = spreadsheet.getDataRange();
  var sourceValues = source.getValues();

  var rowCount = sourceValues.length;
  var columnCount = sourceValues[0].length;

  var target = spreadsheet.getRange(1,4, rowCount, columnCount);
  target.setValues(sourceValues);
}

这是我想要得到的 sample spreadsheet。 我知道使用公式会更容易,但问题是我在 Source 中的数据是动态的,因为它来自 ImportXML,所以有时提取的数据会消失,这就是为什么我想在获取它们之前只粘贴值,以免它们丢失。

使用filter(),像这样:

function appendA2bToD2e() {
  const ss = SpreadsheetApp.getActive();
  const source = ss.getRange('Sheet1!A2:B');
  const target = ss.getRange('Sheet1!D2:E');
  appendUniquesToRange_(source, target);
}

function appendUniquesToRange_(sourceRange, targetRange) {
  const dataToAppend = sourceRange.getValues();
  const existingData = targetRange.getValues();
  const newData = existingData
    .concat(dataToAppend)
    .filter((row, rowIndex, array) =>
      array
        .map(tuple => tuple[0])
        .indexOf(row[0]) === rowIndex && row[0] !== ''
    );
  targetRange
    .clearContent()
    .offset(0, 0, newData.length, newData[0].length)
    .setValues(newData);
}