程式庫快速入門導覽課程

建立 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. 為指令碼命名為「Remove duplicate rows」,然後按一下「Rename」

  8. 依序按一下「部署」「新部署作業」。

  9. 按一下「選取類型」旁的「啟用部署類型」啟用部署作業類型的圖示 >「程式庫」

  10. 輸入媒體庫的說明,例如「移除重複的資料列」。凡是擁有存取權的使用者,都可以查看這個說明。

  11. 按一下「部署」

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

  13. 在「ID」下方,複製指令碼 ID,以便在後續步驟中使用。

執行指令碼

如要使用程式庫,您至少必須具備其 Apps Script 專案的檢視權限。由於您建立了資料庫,因此擁有使用資料庫的必要權限。如要讓其他人使用程式庫,請授予對方 Apps Script 專案的檢視權限。

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

  1. 開啟含有重複資料列的 Google 試算表試算表。如要使用試算表範例,請複製「複製資料列範例」試算表
  2. 依序按一下「Extensions」>「Apps Script」
  3. 按一下「Library」旁的「Add a library」
  4. 在「Script ID」部分,貼上先前複製的程式庫 Apps Script 專案中的指令碼 ID。
  5. 按一下「查詢」
  6. 在「版本」部分中,選取「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 2 維陣列,其中包含工作表中的所有值。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 開發人員專家 Romain Vialard 建立。請在 Twitter 上追蹤 Romain (@romain_vialard)。

這個範例是由 Google 維護,並由 Google 開發人員專家提供協助。

後續步驟