У меня ситуация, аналогичная описанной в этом вопросе : две таблицы, с входными данными, поступающими на лист Feed с использованием функции importxml и Data лист, куда копируются новые строки благодаря сценарию, настроенному на ежедневный запуск.
Однако текущий сценарий создает ежедневные дубликаты.Поэтому я хотел бы адаптировать ответ, представленный на вопрос выше, чтобы скрипт проверял идентификаторы в столбце F и копировал только строки с новыми идентификаторами.
Как обновить раздел ниже, в котором создаетсяхэш к одному, который ищет идентификаторы в столбце F вместо?Кроме того, мои строки согласованы, поэтому правильно ли предположить, что я могу просто удалить соответствующие строки кода в конце?
Образец Google Sheet доступен здесь .
function appendUniqueRows() {
var ss = SpreadsheetApp.getActive();
var sourceSheet = ss.getSheetByName('Get Data');
var destSheet = ss.getSheetByName('Final Data');
var sourceData = sourceSheet.getDataRange().getValues();
var destData = destSheet.getDataRange().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, 1, mergedData.length, mergedData[0].length)
.setValues(mergedData);
}
Я новичок в этом мире скриптов Google Apps, поэтому, пожалуйста, дайте мне знать, если я упускаю какую-либо важную информацию.Заранее спасибо за помощь.