[英]Append new records on the last empty row (instead of ignoring last empty rows and adding the new row at the end of the sheet)
我有這個腳本,它工作正常。 但是,它會忽略工作表中最后一個記錄行之后的空白行。 相反,它將一個全新的行添加到要附加的新記錄的工作表的末尾。 例如:我有一張 1000 行的工作表。 在這種情況下,只有第 25 行之前的記錄。所以,它做了什么......它在第 1001 行添加/追加新記錄,而不是將其添加到最后一條記錄(即第 26 行)之后的空行。
這是一個虛擬表鏈接: https://docs.google.com/spreadsheets/d/1mt9G9PWdIvAQsQSWmRb14o8eeocCx9gkOWJT6KHAGa0/edit?usp=sharing
function appendUniqueRows() {
var ss = SpreadsheetApp.getActive();
var sourceSheet = ss.getSheetByName('source');
var destSheet = ss.getSheetByName('destination');
var sourceData = sourceSheet.getRange("A:D").getValues();
var destData = destSheet.getRange("E:H").getValues();
//Check whether destination sheet is empty
if (destData.length === 1 && "" === destData[0].join('')) {
// Empty, so ignore the phantom row
destData = [];
}
// Generate hash for comparisons
var destHash = {};
destData.forEach(function(row) {
destHash[row.join('')] = true; // could be anything
});
// Concatentate source rows to dest rows if they satisfy a uniqueness filter
var mergedData = destData.concat(sourceData.filter(function (row) {
var hashedRow = row.join('');
if (!destHash.hasOwnProperty(hashedRow)) {
// This row is unique
destHash[hashedRow] = true; // Add to hash for future comparisons
return true; // filter -> true
}
return false; // not unique, filter -> false
}));
// // Check whether two data sets were the same width
// var sourceWidth = (sourceData.length > 0) ? sourceData[0].length : 0;
// var destWidth = (destData.length > 0) ? destData[0].length : 0;
// if (sourceWidth !== destWidth) {
// // Pad out all columns for the new row
// var mergedWidth = Math.max(sourceWidth,destWidth);
// for (var row=0; row<mergedData.length; row++) {
// for (var col=mergedData[row].length; col<mergedWidth; col++)
// mergedData[row].push('');
// }
// }
// Write merged data to destination sheet
destSheet.getRange(1, 5, mergedData.length, mergedData[0].length)
.setValues(mergedData);
}
我相信你的目標如下。
sourceData
添加到destData
最后一行的下一行。 我認為你的問題的原因是由於var mergedData = destData.concat(sourceData.filter(function (row) {
。在這種情況下,過濾后的sourceData
被添加到 var destData
var destData = destSheet.getRange("E:H").getValues();
. destSheet.getRange("E:H").getValues()
包括空行。那么,在這種情況下,如何進行以下修改?
var sourceData = sourceSheet.getRange("A:D").getValues();
var destData = destSheet.getRange("E:H").getValues();
var sourceData = sourceSheet.getRange("A1:D" + sourceSheet.getLastRow()).getValues();
var destData = destSheet.getRange("E1:H" + destSheet.getLastRow()).getValues();
或者
var mergedData = destData.concat(sourceData.filter(function (row) {
var mergedData = destData.filter(row => row.join('')).concat(sourceData.filter(function (row) {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.