建立 Apps Script 程式庫,用來移除試算表資料中的重複資料列。
目標
- 設定指令碼。
- 執行指令碼。
必要條件
如要使用這個範例,您必須具備以下必要條件:
- Google 帳戶 (Google Workspace 帳戶可能需要取得管理員核准)。
- 可連上網際網路的網路瀏覽器。
設定指令碼
如要建構程式庫,請按照下列步驟操作:
- 登入 Google 帳戶。
- 如要開啟指令碼編輯器,請前往 script.google.com。
- 按一下左上角的「新專案」。
刪除指令碼編輯器中的任何程式碼,然後貼上下方的程式碼。
按一下「儲存」。
按一下左上方的「未命名專案」。
將指令碼命名為「移除重複列」,然後按一下「重新命名」。
依序按一下「部署」>「新增部署作業」。
按一下「Select type」(選取類型) 旁的「Enable Deployment type」(啟用部署類型) >「Library」(程式庫)。
輸入資料庫的說明,例如「移除重複的資料列」。任何有權存取程式庫的使用者都能查看這個說明。
按一下「部署」。
按一下左側的「專案設定」圖示 。
在「ID」下方複製指令碼 ID,供後續步驟使用。
執行指令碼
如要使用程式庫,您至少必須擁有其 Apps Script 專案的檢視權限。由於您建立了程式庫,因此擁有使用該程式庫的必要權限。如果您希望讓其他人使用這個程式庫,請授予他們 Apps Script 專案的檢視權限。
如要使用這個程式庫,請按照下列步驟操作:
- 開啟含有重複資料列的 Google 試算表試算表。如要使用範例試算表,請複製「範例重複資料列」試算表。
- 依序按一下「擴充功能」>>「Apps Script」。
- 按一下「Libraries」(資料庫) 旁邊的「Add a Library」(新增程式庫) 。
- 在「Script ID」部分,貼上您在上一節中從程式庫 Apps Script 專案的指令碼 ID。
- 按一下「查詢」。
- 在「版本」區段中,選取「1」。
- 按一下 [新增]。
刪除指令碼編輯器中的任何程式碼,然後貼上下方的程式碼。
function runLibrary() { Removeduplicaterows.removeDuplicates(); }
在函式下拉式選單中,選取「runLibrary」runLibrary。
按一下「執行」。
返回試算表即可查看更新後的資料,而不會出現重複資料列。
查看程式碼
如要查看這項解決方案的 Apps Script 程式碼,請點選下方的「查看原始碼」:
查看原始碼
首先,指令碼會對試算表進行單一呼叫來擷取所有資料。您可以選擇逐列讀取工作表,但 JavaScript 作業會比與其他服務 (例如試算表) 通訊更快速。呼叫的次數越少,運作速度就越快。每個指令碼執行作業的執行時間上限為 6 分鐘,因此這一點相當重要。
變數 data
是 JavaScript 2D 陣列,內含工作表中所有的值。newData
是空白陣列,指令碼會在其中加入所有非重複資料列。
第一個 for
迴圈會疊代 data
2D 陣列中的每個資料列。針對每個資料列,第二個迴圈會測試 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 Developers 專家 Romain Vialard 製作。在 Twitter 上追蹤 Romain @romain_vialard。
本範例是由 Google 在 Google Developers 專家的協助下維護。