库快速入门

构建一个 Apps 脚本库,以便移除电子表格数据中的重复行。

目标

  • 设置脚本。
  • 运行脚本。

前提条件

如需使用此示例,您需要满足以下前提条件:

  • Google 账号(Google Workspace 账号可能需要管理员批准)。
  • 一个能够访问互联网的网络浏览器。

设置脚本

如需构建库,请按以下步骤操作:

  1. 登录您的 Google 账号。
  2. 如需打开脚本编辑器,请前往 script.google.com
  3. 点击左上角的新建项目
  4. 删除脚本编辑器中的所有代码,然后粘贴以下代码。

    sheets/removingDuplicates/removingDuplicates.gs
    /**
     * Removes duplicate rows from the current sheet.
     */
    function removeDuplicates() {
      const sheet = SpreadsheetApp.getActiveSheet();
      const data = sheet.getDataRange().getValues();
      const uniqueData = {};
      for (let row of data) {
        const key = row.join();
        uniqueData[key] = uniqueData[key] || row;
      }
      sheet.clearContents();
      const newData = Object.values(uniqueData);
      sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
    }
  5. 点击“保存”图标 “保存”图标

  6. 点击左上角的未命名项目

  7. 为脚本命名为 Remove duplicate rows(移除重复的行),然后点击 Rename(重命名)。

  8. 依次点击 Deploy > New deployment

  9. 点击“选择类型”旁边的“启用部署类型”图标 用于启用部署类型的图标 >

  10. 输入库的说明,例如移除重复行。有权访问该库的任何用户都可以查看此说明。

  11. 点击部署

  12. 点击左侧的项目设置 项目设置的图标

  13. 在“ID”下,复制脚本 ID 以供后续步骤使用。

运行脚本

如需使用某个库,您必须至少拥有其 Google Apps Script 项目的查看权限。由于您创建了该库,因此您拥有使用该库所需的权限。如果您想让其他人使用该库,请为他们授予对该 Apps 脚本项目的查看权限。

如需使用该库,请按以下步骤操作:

  1. 打开包含重复行数据的 Google 表格电子表格。如需使用示例电子表格,请复制重复行示例电子表格
  2. 依次点击扩展程序 > Google Apps 脚本
  3. 点击媒体库旁边的“添加媒体库”图标
  4. Script ID(脚本 ID)部分,粘贴您在上一部分中复制的库 Apps Script 项目中的脚本 ID。
  5. 点击查找
  6. 版本部分中,选择 1
  7. 点击添加
  8. 删除脚本编辑器中的所有代码,然后粘贴以下代码。

    function runLibrary() {
     Removeduplicaterows.removeDuplicates();
    }
    
  9. 在“函数”下拉菜单中,选择 runLibrary

  10. 点击运行

  11. 返回电子表格,查看不含重复行的更新数据。

查看代码

如需查看此解决方案的 Apps 脚本代码,请点击下方的查看源代码

查看源代码

首先,脚本会对电子表格进行一次调用,以检索所有数据。您可以选择逐行读取工作表,但 JavaScript 操作的速度要比与 Google 表格等其他服务通信的速度快得多。您调用次数越少,速度就越快。这一点非常重要,因为每次脚本执行的运行时间上限为 6 分钟。

sheets/removingDuplicates/removingDuplicates.gs
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();

变量 data 是一个 JavaScript 二维数组,其中包含工作表中的所有值。newData 是一个空数组,脚本会将所有非重复行放入其中。

sheets/removingDuplicates/removingDuplicates.gs
const newData = Object.values(uniqueData);

第一个 for 循环会迭代 data 二维数组中的每一行。对于每一行,第二个循环都会测试 newData 数组中是否已存在另一行具有匹配数据。如果不是重复项,系统会将该行推送到 newData 数组。

sheets/removingDuplicates/removingDuplicates.gs
uniqueData[key] = uniqueData[key] || row;

最后,该脚本会删除工作表的现有内容,并插入 newData 数组的内容。

sheets/removingDuplicates/removingDuplicates.gs
sheet.clearContents();
const newData = Object.values(uniqueData);
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);

修改

您可以根据需要随意修改库。下面是一个可选修改。

移除某些列中数据匹配的行

您可能希望仅移除其中一个或两个列中包含匹配数据的行,而不是移除完全匹配的行。为此,您可以更改条件语句。

在示例代码中,更新以下行:

    if(row.join() == newData[j].join()){
      duplicate = true;
    }

将该行替换为以下代码:

    if(row[0] == newData[j][0] && row[1] == newData[j][1]){
      duplicate = true;
    }

每当工作表中两行的第一列和第二列中的数据相同时,上述条件语句都会查找重复项。

贡献者

此示例由 Google 开发者专家 Romain Vialard 创建。在 Twitter 上关注 Romain(@romain_vialard)。

此示例由 Google 维护,并由 Google 开发者专家提供帮助。

后续步骤