【问题标题】:Would like to script on Google Sheets a way to remove certain rows想在 Google 表格上编写脚本以删除某些行
【发布时间】:2021-05-24 12:42:04
【问题描述】:

第一行有一个列标题:名字、姓氏、电子邮件、成绩、日期 我们有一些例子,人们需要重新参加考试,因此将在电子表格中添加另一个条目,我们正在寻找的是一种方式,如果有人重新参加考试,然后将他们的新数据添加到电子表格中,我们可以自动删除他们的旧信息

所以,我已经取得了一些进展,这个脚本删除了重复的行,但完全重复,所以我需要以某种方式对其进行编辑以仅查看前 2 列,然后根据 Date 列删除最旧的条目:

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var newData = [];
  for (var i in data) {
    var row = data[i];
    var duplicate = false;
    for (var j in newData) {
      if (row.join() == newData[j].join()) {
        duplicate = true;
      }
    }
    if (!duplicate) {
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

【问题讨论】:

  • 数据如何添加到电子表格中?谷歌表单? Google Apps 脚本?你能举个例子吗?
  • 他们从 Zapier 添加数据
  • 那是如何工作的?
  • 我从未使用过 Zapier,也没有关于如何删除重复项的脚本示例,因此我没有可以理解的参考点来回答您的问题。
  • 当他们在平台上完成测试时,它会将用户的数据输入到电子表格中,包括通过/失败、分数和日期

标签: google-apps-script google-sheets


【解决方案1】:

您只想比较每行的前两列而不是整行。

因此,您应该只比较索引01,而不是整个数组(您正在使用join 做的事情)。你可以替换这一行:

if (row.join() == newData[j].join()) {

有了这个:

if (row[0] === newData[j][0] && row[1] === newData[j][1]) {

编辑:

如果您想保留最新的,而不是最旧的,请反向循环您的二维数组。例如,您可以在检索源数据时使用reverse

var data = sheet.getDataRange().getValues().reverse();

或者,使用for 反向循环:

for (let i = data.length - 1; i >= 0; i--) {

一般来说,考虑使用removeDuplicates(columnsToCompare)

编辑 2:

如果您有标题,只需在设置值时再次使用reverse 以保持原始顺序:

sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData.reverse());

【讨论】:

  • 嗨,谢谢你,绝对进步。刚刚对此进行了测试,它现在已经删除了重复的行,但是它删除了所有最新数据,因此仍在努力让它根据日期列删除最旧的数据
  • @CraigSummers 看看我更新的答案。
  • @lamblichus 有效,但是,标题的第一行移到了行的底部,如果有意义的话,第一行数据不在标题行中
  • @CraigSummers 如果您有标题,只需在设置值时再次使用reversesheet.getRange(2, 1, newData.length, newData[0].length).setValues(newData.reverse());(最好不要在您的范围内首先包含标题,并使用Range.clearContent() 而不是 Sheet.clearContents(),而是 nvm)。
  • @lamblichus,可行,但只需将 sheet.getRange(2, 1, 更改为 sheet.getRange(1, 1,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多