之前在三招移除重複資料的教學,介紹了用三種方式來把工作表上的重複資料移除,各自有各自適合的場景,其實還有一招是 Apps Script 上可以操作的,就是今天要介紹的 removeDuplicates()
這個方法(method)。
removeDuplicates()
就是「移除重複內容功能」的 Apps Script 版,會刪除指定範圍內,任何跟前一列重複的列,隱藏列、或是篩選器篩出來的值如果有重複也會被移除。至於怎樣算是重複,Apps Script 官方文件的定義是「就算大小寫不同、格式不同、算式或函式不同,只要值相同就算是重複」。
所以按照這個定義,我來舉一些會被視為重複值的例子給你參考:
FALSE
)當然就是清理數據的時候了!我喜歡在這種腳本的開頭、或是末端加入 removeDuplicates()
,大概像是這樣:
function dataCleaning() {
// 宣告變數;
range.removeDuplicates();
// 清理步驟一;
// 清理步驟二;
// 清理步驟三;
range.removeDuplicates();
}
以上面的例子來看,腳本會先在進入清理步驟之前把眼前的範圍清理重複資料,然後跑完所有的清理步驟後、再移除重複資料,這麼一來就可以確保每筆資料都是不重複的了。
我也喜歡把它跟可以裁切多餘空白的 trimWhitespace()
方法一起用,像這樣:
function dataCleaning() {
// 宣告變數;
range.trimWhitespace();
range.removeDuplicates();
// 後續步驟...
}
最後要注意 removeDuplicates()
只能移除靜態的資料,沒辦法移除某些函式輸出的動態資料,像是 QUERY
、IMPORTRANGE
、GOOGLEFINANCE
等函式,這時會建議搭配 UNIQUE
或是其他可以整理陣列的函式。
如果你需要複習上面的這些函式,傳送門這邊請:
這個方法(method)是在 range 的類別(class)底下,要先定義範圍才可以用這個方法來去除重複資料。語法相當簡單,在範圍後面寫 removeDuplicates()
就可以了。舉例:
function dataCleaning() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const range = sheet.getRange("A:E");
range.removeDuplicates();
}
這個就會對目前正在編輯的工作表中,A 欄到 E 欄的範圍裡移除重複的資料了。
就像「移除重複內容」功能,你還可以指定要分析的欄是什麼:
語法也很簡單,只要在方法的括號裡面輸入方括號與欄位的索引數字就可以,像是這樣:
function dataCleaning() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const range = sheet.getRange("A:E");
// 分析指定範圍的第一個欄位
range.removeDuplicates([1]);
}
我在這邊寫的是 [1]
,代表要讓 removeDuplicates() 方法分析指定範圍(A:E)內的第一欄,也就是 A 欄了。
如果你有兩個以上的欄位要分析,也當然沒問題,輸入的數字用逗號隔開就可以了。像是這樣:
function dataCleaning() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const range = sheet.getRange("A:E");
// 分析指定範圍的第一個、第三個、第五個欄位
range.removeDuplicates([1, 3, 5]);
}
這邊寫的是 [1, 3, 5]
,就是指定範圍的第一個、第三個跟第五個欄位,也就是對應到指定範圍的 A 欄、C 欄跟 E 欄了。
如果你的指定範圍不是從 A 欄開始,記得小心算一下,免得分析到錯的欄位喔。
移除重複資料的 Apps Script 是不是沒有你想像中來得那麼難呢?希望經過我的解釋,有讓你覺得比較安心。
如果你喜歡這次的文章,歡迎你透過這些方法支持我:
想要看更多文章的話,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!
我是喜特先生,Mr. Sheet,我們下個教學見!