我在这里查看此帖子,它与我正在为我的项目做的事情密切相关。我将如何更改它以使其工作如下:
我在“测试表”表上的 A 到 P 列中有数据。P 列提供“DisputeStatus”。状态可以是以下三种状态之一:NULL、PENDING 或 APPROVED。每天都会将新数据添加到行的底部。仅当每天将新数据添加到底部并且上面先前记录的行项目的“DisputeStatus”已更改时,才会创建重复项。因此,我现在将有 2 行在 A 到 O 列中具有完全相同的数据,但在 P 列(“DisputeStatus”)中会有所不同,其中一行表示 PENDING,另一行表示 APPROVED。我想找到重复项,然后只删除具有“旧优先级”状态的重复项,并保留具有“新优先级”状态的重复行。
例如:
以下状态优先级集是 P 列中具有不同“DisputeStatus”的可能重复行:
NULL (old)(delete)
PENDING (new)(keep)
PENDING (old)(delete)
APPROVED (new)(keep)
PENDING (old)(delete)
DENIED (new)(keep)
function removeDuplicates()
{
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test Sheet");
var dataRange = sheet.getDataRange();
var data = dataRange.getValues();
var indexOfStatusColumn = 16;
var newData = [];
data.forEach(function (row, rowI){
var isDuplicate = false
if (newData.length)
newData.forEach(function (dup, dupI)
{
if (dup[3] == row[3])
{
if (row[indexOfStatusColumn] == "APPROVED" && dup[indexOfStatusColumn] != "APPROVED")
newData[dupI][indexOfStatusColumn] = "APPROVED";
isDuplicate = true;
return (false);
}
})
if (!isDuplicate)
newData.push(row);
});
dataRange = sheet.getRange(2, 1, dataRange.getLastRow() - 1, dataRange.getLastColumn());
dataRange.clearContent();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}