If statement Google脚本应用程序删除Google工作表中特定列中具有特定值的重复行
我有一个谷歌工作表,其中人们提交他们正在处理的任务,他们将提交一个状态更新,该更新要么“正在进行”,要么“完成”,比如任务a。任务a在D[4]列,状态在E[5]列。我试图让这段代码只在存在状态为“完成”的重复任务A时删除任务A的“进行中”行。这可用于标识重复行并按顺序删除重复行,但我不确定如何使其在存在“任务A”“完成”行时仅删除重复的“任务A”“正在进行”行。任何帮助都将不胜感激If statement Google脚本应用程序删除Google工作表中特定列中具有特定值的重复行,if-statement,google-apps-script,google-sheets,If Statement,Google Apps Script,Google Sheets,我有一个谷歌工作表,其中人们提交他们正在处理的任务,他们将提交一个状态更新,该更新要么“正在进行”,要么“完成”,比如任务a。任务a在D[4]列,状态在E[5]列。我试图让这段代码只在存在状态为“完成”的重复任务A时删除任务A的“进行中”行。这可用于标识重复行并按顺序删除重复行,但我不确定如何使其在存在“任务A”“完成”行时仅删除重复的“任务A”“正在进行”行。任何帮助都将不胜感激 function removeDuplicates() { var sheet = SpreadsheetAp
function removeDuplicates() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
var data = sheet.getDataRange().getValues();
var newData = [];
for (i in data) {
var row = data[i];
var duplicate = false;
for (j in newData) {
if(row[3] == newData[j][3]){
duplicate = true;
}
}
if (!duplicate) {
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
我会试试看
function removeDuplicates()
{
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");
var dataRange = sheet.getDataRange();
var data = dataRange.getValues();
var indexOfStatusColumn = 4;
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] == "Complete" && dup[indexOfStatusColumn] != "Complete")
newData[dupI][indexOfStatusColumn] = "Complete";
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);
}
几件事
forEach()
false
来中断循环,以避免通过所有新数据进行无用的解析
data
上的复制是否Complete
,如果是,则检查newData上的复制是否不完整
newData
中的值更改为“Complete”,这样它将保持完整状态(小心,如果两行上的数据不同,它可能会扭曲数据)clearContent()
,以避免删除工作表的所有内容,但仅删除其中的特定部分。在这里,我重新构建了它以保留标题function removeDuplicates()
{
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");
var dataRange = sheet.getDataRange();
var data = dataRange.getValues();
var indexOfStatusColumn = 4;
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] == "Complete" && dup[indexOfStatusColumn] != "Complete")
newData[dupI][indexOfStatusColumn] = "Complete";
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);
}
几件事
forEach()
false
来中断循环,以避免通过所有新数据进行无用的解析
data
上的复制是否Complete
,如果是,则检查newData上的复制是否不完整
newData
中的值更改为“Complete”,这样它将保持完整状态(小心,如果两行上的数据不同,它可能会扭曲数据)clearContent()
,以避免删除工作表的所有内容,但仅删除其中的特定部分。在这里,我重新构建了它以保留标题您能分享一下您的电子表格吗?我很乐意帮忙。@JSmith谢谢!刚刚要求您访问。您能分享您的电子表格吗?我很乐意为您提供帮助。@JSmith谢谢!只是请求您访问。谢谢您的帮助,不幸的是,这似乎不起作用。这是电子表格。我希望这有帮助!我真的很感谢你的帮助@里基亚当斯太棒了!很高兴这有帮助。ThanksI刚刚尝试再次运行它,但由于某些原因,它仍然没有删除正在进行的行。而是删除状态为“完成”的重复任务。它还会复制第一行并将其插入第二行。你知道为什么会这样吗?很抱歉谢谢@RickyAdams重新向您发送了访问请求谢谢您的帮助,不幸的是,这似乎不起作用。这是电子表格。我希望这有帮助!我真的很感谢你的帮助@里基亚当斯太棒了!很高兴这有帮助。ThanksI刚刚尝试再次运行它,但由于某些原因,它仍然没有删除正在进行的行。而是删除状态为“完成”的重复任务。它还会复制第一行并将其插入第二行。你知道为什么会这样吗?很抱歉谢谢@RickyAdams重新向您发送了访问请求