在电子表格中复制和粘贴没有重复的值
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);
}
我只想复制并粘贴从源范围到目标的值(不是公式),不要重复(有些值已经在目标范围内)。我尝试按照几个在线教程从复制粘贴部分开始(甚至不是唯一条件)但不断收到错误“参数(字符串,数字,数字,数字)与 [ 的方法签名不匹配=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);
}