Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 在google sheets中删除60天滚动窗口中的重复项_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 在google sheets中删除60天滚动窗口中的重复项

Google apps script 在google sheets中删除60天滚动窗口中的重复项,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个脚本,可以在60天的滚动窗口中删除重复项。当一个联系人出现在工作表中时,我需要该工作表从该点开始回顾60天,如果是重复的,则不计算在内。这个脚本的问题是,随着时间的推移,它会继续更改前一天的计数。它正在改变前几天的每日计数。一天结束后,不应调整前一天的计数。 我只需要一个修改,在一天结束后,它不应该在未来改变。 这是剧本 const sheetName = 'Data'; const matchRecordsWithinDays = 60; function removeDuplica

我有一个脚本,可以在60天的滚动窗口中删除重复项。当一个联系人出现在工作表中时,我需要该工作表从该点开始回顾60天,如果是重复的,则不计算在内。这个脚本的问题是,随着时间的推移,它会继续更改前一天的计数。它正在改变前几天的每日计数。一天结束后,不应调整前一天的计数。 我只需要一个修改,在一天结束后,它不应该在未来改变。 这是剧本

const sheetName = 'Data';
const matchRecordsWithinDays = 60;

function removeDuplications() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  const emails = sheet.getRange('F2:F').getValues().filter(String).map((x,index) => {
    return {
      email: x[0].toLowerCase().trim(),
      row: index + 2
    }
  });
  const dates = sheet.getRange('G2:G').getValues().map(x => x[0]).filter(String).map(x => new Date(x));

  let deletingRows = [];

  for(let i=0;i<emails.length;i++) {
    const data1 = emails[i];
    const matchingEmails = emails.filter(em => em.email === data1.email);

    for(let j=0;j<matchingEmails.length;j++) {
      const data2 = matchingEmails[j];

      if(data1.row > data2.row && isWithLastXDays(dates[data2.row-2]) && !deletingRows.includes(data2.row)) {
        deletingRows.push(data2.row);
      }
    }
  }

  let ui = null;
  try {
    ui = SpreadsheetApp.getUi();
  } catch(e) {}

  if(ui && deletingRows.length === 0) return ui.alert("No duplicates found!","There are no duplicate records found within last "+matchRecordsWithinDays+" days.", ui.ButtonSet.OK)

  deletingRows.sort((a,b) => {
    if(a > b) return -1;
    else if(a < b) return 1;
    else return 0
  })
  
  if(ui) {
    const response = ui.alert("Duplicated records found!","There are "+deletingRows.length+" duplicate records found within last "+matchRecordsWithinDays+" days, Press OK to delete them.", ui.ButtonSet.OK_CANCEL);
    if(response == ui.Button.CANCEL) return;
  }

  deletingRows.forEach(row => {
    sheet.deleteRow(row);
  }); 
}

function onOpen() {
  SpreadsheetApp.getUi().createMenu('Actions')
  .addItem('Remove duplications in last '+matchRecordsWithinDays+' days','removeDuplications')
  .addToUi();
}

function isWithLastXDays(date) {
  var deltaTime = Math.abs(date.getTime() - (new Date()).getTime());
  var deltaDays = deltaTime / (1000 * 3600 * 24);
  return deltaDays <= matchRecordsWithinDays;
} 
const sheetName='Data';
常数matchRecordsWithinDays=60;
函数移除的复制(){
const sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
const emails=sheet.getRange('F2:F').getValues().filter(String).map((x,index)=>{
返回{
电子邮件:x[0]。toLowerCase().trim(),
行:索引+2
}
});
const dates=sheet.getRange('G2:G').getValues().map(x=>x[0]).filter(String).map(x=>newdate(x));
让deletingRows=[];
for(设i=0;i em.email==data1.email);
对于(设j=0;j data2.row&&isWithLastXDays(日期[data2.row-2])&&!deletingRows.includes(data2.row)){
deletingRows.push(data2.row);
}
}
}
设ui=null;
试一试{
ui=SpreadsheetApp.getUi();
}捕获(e){}
如果(ui&&deletingRows.length==0)返回ui.alert(“未找到重复项!”,“在上一次”+matchRecordsWithinDays+“days.”内未找到重复记录,ui.ButtonSet.OK)
删除行。排序((a,b)=>{
如果(a>b)返回-1;
否则如果(a{
表.删除行(行);
}); 
}
函数onOpen(){
SpreadsheetApp.getUi().createMenu('操作')
.addItem('Removed replications in last'+matchRecordsWithinDays+'days','RemovedUpplications'中的删除重复项)
.addToUi();
}
函数为最后xDays(日期){
var deltaTime=Math.abs(date.getTime()-(new date()).getTime());
var deltaDays=deltaTime/(1000*3600*24);
返回deltaDays

您的工作表上G列中的日期有问题。您是故意这样做的吗?不同的排序顺序和不同的日期格式正是导致此问题几乎无法解决的原因。(更不用说,我几乎无法理解您试图实现的目标。)令人惊讶的是,原来的剧本不知怎么起作用了

你需要决定如何对日期进行排序(升序或降序),并选择一种格式。我建议坚持ISO格式(2021-05-08 07:52:10)


此后问题不太可能自行消失。

请分享一份数据组织的样本表,并尝试用步骤或更详细的“前几天”进行解释你这么说是什么意思?这是表格。你可以看一下,也许可以提供一些帮助。问题在于“每日跟踪”选项卡中的潜在客户数量会在一天结束后继续变化。一旦一天完成,并且每日跟踪表上显示了潜在客户数量,那么随着futu上的潜在客户数量增加,该表格就不应该变化最近几天。我注意到,由于一些我不知道的原因,潜在客户数量每天都会减少。我看到了你们的表格,但仍然无法理解它们的作用。可能我在这方面的知识还不够。我无法理解一些商业逻辑。对不起。如果你简单地告诉我,也许我可以得到它:从一个单元格中获取的数字如果C列中的单元格包含…等之间的日期,则将A列添加到B列中的单元格。