在最后一个空行上附加新记录(而不是忽略最后一个空行并在工作表末尾添加新行)



我有这个脚本,它工作正常。但是,它忽略工作表中最后一个记录行之后的空白行。相反,它将为正在追加的新记录在工作表的末尾添加一个全新的行。例如:我有一个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 = destSheet.getRange("E:H").getValues();destData中。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) {

注意:

  • 考虑到工艺成本,我认为第一次修改比较合适。

相关内容

  • 没有找到相关文章

最新更新