建立 Apps Script 程式庫,用來移除試算表資料中的重複資料列。
目標
- 設定指令碼。
- 執行指令碼。
必要條件
如要使用這個範例,您必須符合下列先決條件:
- Google 帳戶 (Google Workspace 帳戶可能需要管理員核准)。
- 可連上網際網路的網路瀏覽器。
設定指令碼
如要建構程式庫,請按照下列步驟操作:
- 登入 Google 帳戶。
- 如要開啟指令碼編輯器,請前往 script.google.com。
- 按一下左上方的「新專案」。
刪除指令碼編輯器中的任何程式碼,然後貼上下列程式碼。
按一下「儲存」圖示
。
按一下左上方的「未命名專案」。
將指令碼命名為「Remove duplicate rows」(移除重複的資料列),然後按一下「Rename」(重新命名)。
依序點選「Deploy」(部署) >「New deployment」(新部署作業)。
按一下「選取類型」旁的「啟用部署類型」
>「程式庫」。
輸入程式庫的說明,例如「移除重複的列」。任何有權存取媒體庫的使用者都能查看這項說明。
按一下 [Deploy] (部署)。
按一下左側的「專案設定」圖示
。
在「ID」下方,複製指令碼 ID,供後續步驟使用。
執行指令碼
如要使用程式庫,您必須至少擁有該程式庫 Apps Script 專案的檢視權限。由於您是資料庫的建立者,因此擁有使用資料庫的 必要權限 。如要允許他人使用程式庫,請授予他們 Apps Script 專案的檢視權限。
如要使用程式庫,請按照下列步驟操作:
- 開啟含有重複資料列的 Google 試算表。如要使用範例試算表,請複製「Sample duplicate rows」(範例重複列) 試算表。
- 依序點選「擴充功能」>「Apps Script」。
- 按一下「程式庫」旁的「新增程式庫」圖示 。
- 在「指令碼 ID」部分,貼上您在上一個部分複製的程式庫 Apps Script 專案指令碼 ID。
- 按一下「查詢」。
- 在「版本」部分中,選取「1」。
- 按一下 [新增]。
刪除指令碼編輯器中的任何程式碼,然後貼上下列程式碼。
function runLibrary() { Removeduplicaterows.removeDuplicates(); }
在函式下拉式選單中,選取「runLibrary」runLibrary。
按一下「執行」。
返回試算表,查看更新後的資料 (不含重複的資料列)。
檢查程式碼
如要查看這項解決方案的 Apps Script 程式碼,請按一下下方的「查看原始碼」:
查看原始碼
首先,指令碼會對試算表進行單一呼叫,以擷取所有資料。您可以選擇逐列讀取工作表,但 JavaScript 作業的速度遠比與試算表等其他服務通訊快。呼叫次數越少,速度就越快。這點非常重要,因為每個指令碼的執行時間上限為 6 分鐘。
變數 data
是 JavaScript 二維陣列,內含工作表中的所有值。newData
是空陣列,指令碼會將所有不重複的資料列放入其中。
第一個 for
迴圈會疊代 data
二維陣列中的每個資料列。第二個迴圈會針對每個資料列進行測試,確認 newData
陣列中是否已存在資料相符的資料列。如果不是重複項目,系統會將資料列推送至 newData
陣列。
最後,指令碼會刪除工作表的現有內容,並插入 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 開發人員專家協助。