【问题标题】:Delete row based of duplicate cells in a column using Google Apps Script使用 Google Apps 脚本删除基于列中重复单元格的行
【发布时间】:2021-09-16 06:54:51
【问题描述】:

我想要一个谷歌应用脚​​本,它可以删除电子表格中在特定列中有重复值的行(比如第一列是唯一 ID)。现在,我希望它专门保留最底部的重复行并删除它上面的所有重复行。

在下图中,您可以看到突出显示的 ID 是重复的,因为它们的邮政编码已更改。我想保留副本的最底行并删除顶行。例如,对于 Lydia 和 Lizzy,我想保留第 9 行和第 10 行,它们具有最新的邮政编码,我想删除第 2、5 和 8 行。

是否有谷歌应用脚​​本可以做到这一点?

这是我要删除的示例图片:

【问题讨论】:

  • 当然可以,但是你需要证明你尝试过一些东西。如果您希望有人从头开始编写代码,您应该在 Upwork 上发帖;)
  • 更改数据输入方式,在输入新数据时始终在顶部插入一行。然后只需使用工具菜单>数据>删除重复项。

标签: google-apps-script google-sheets


【解决方案1】:

目前还不清楚为什么要在此处使用脚本,因为可以使用普通的电子表格公式按要求过滤范围,如下所示:

=arrayformula( 
  iferror( 
    vlookup( 
      unique(A2:A), 
      sort(A2:D, row(A2:D), false), 
      column(A2:D), 
      false 
    ) 
  ) 
)

要将原始数据替换为唯一结果,请使用 ControlC 复制和 ControlShiftV 仅粘贴值。在 Mac 上,使用 CShiftV

这个问题指定了 Apps 脚本,所以这里有一个自定义函数来做同样的事情,还有一个简单的函数使用它来过滤电子表格中的硬编码范围。

/**
* Removes duplicates in 'Sheet1!A2:D'.
* Keeps each last row where a key appears.
* Other rows are cleared.
*/
function removePriorDuplicates() {
  const range = SpreadsheetApp.getActive().getRange('Sheet1!A2:D');
  const uniques = getLastUniques(range.getValues(), 0);
  range
    .clearContent()
    .offset(0, 0, uniques.length, uniques[0].length)
    .setValues(uniques);
}

/**
* Gets exactly one row per each unique key in a key column.
* Keeps each last row where a key appears.
* Other rows are filtered out.
*
* @param {Object[][]} array2D The array to filter.
* @param {Number} columnIndex The zero-indexed column number where keys appear.
* @return {Object[][]} A 2D array where there is just one copy of each key.
* @customfunction
*/
function getLastUniques(array2D, columnIndex) {
  // version 1.0, written by --Hyde, 16 September 2021
  //  - see https://stackoverflow.com/a/69204946/13045193
  const keys = array2D.map(row => row[columnIndex]);
  return array2D.filter((row, index) => keys.lastIndexOf(row[columnIndex]) === index);
}

【讨论】:

    猜你喜欢
    • 2021-08-16
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多