程式庫快速入門導覽課程

建立 Apps Script 程式庫,用來移除試算表資料中的重複資料列。

目標

  • 設定指令碼。
  • 執行指令碼。

必要條件

如要使用這個範例,您必須具備下列先決條件:

  • 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. 將指令碼命名為「移除重複的列」,然後按一下「重新命名」

  8. 依序點選「部署」>「新增部署作業」

  9. 按一下「選取類型」旁邊的「啟用部署類型」 啟用部署類型的圖示 >「媒體庫」

  10. 輸入資料庫的說明,例如「移除重複列」。所有人 有權存取資料庫即可查看說明。

  11. 按一下「部署」

  12. 按一下左側的「專案設定」圖示 專案設定圖示

  13. 複製「ID」下方的指令碼 ID,供後續步驟使用。

執行指令碼

如要使用程式庫,您至少需具備該程式庫的查看權限 Apps Script 專案。由於您建立了程式庫,因此擁有 必要權限 以便使用。如要讓其他人使用資料庫,請授予查看權限 。

如要使用這個程式庫,請按照下列步驟操作:

  1. 開啟含有重複資料列的 Google 試算表。使用條件 請先複製「重複的資料列範例」試算表
  2. 依序按一下「擴充功能」>「Apps Script」
  3. 按一下「程式庫」旁邊的 [新增資料庫]
  4. 在「指令碼 ID」部分,貼上程式庫 Apps Script 的指令碼 ID 您在前一節複製的專案
  5. 按一下「查詢」
  6. 在「Version」(版本) 區段中,選取「1」
  7. 按一下 [新增]。
  8. 刪除指令碼編輯器中的任何程式碼,然後貼上下方的程式碼。

    function runLibrary() {
     Removeduplicaterows.removeDuplicates();
    }
    
  9. 在函式下拉式選單中,選取「runLibrary」。runLibrary

  10. 按一下「執行」

  11. 請返回試算表查看更新後的資料,且不含重複資料列。

查看程式碼

如要查看這項解決方案的 Apps Script 程式碼,請按一下「查看原始碼」 如下:

查看原始碼

首先,指令碼會向試算表發出單一呼叫,擷取所有 資料。您可以選擇逐列讀取工作表列,但 JavaScript 作業會 比起「試算表」等其他服務,溝通更加快速越少 通話速度越快。這點非常重要 執行時間最長為 6 分鐘。

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

變數 data 是一個 JavaScript 2D 陣列,其中包含 工作表中的所有值newData 是空白陣列,其中 指令碼會放入所有非重複資料列。

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

第一個 for 迴圈會針對 data 中的每個資料列疊代 2D 陣列。對每個資料列,第二個迴圈會測試是否另一個含有 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 Developers 專家 Romain Vialard 所建立。追蹤 Romain 的 Twitter 專頁 @romain_vialard

這個範例是由 Google 在 Google Developers 專家的協助下維護。

後續步驟