我正在處理一個由 API 實時添加資料的電子表格。API 中的資料來自注冊時事通訊的用戶,由基本資料組成。當從 de API 發送資料時,它會作為新行添加到電子表格中。
用戶還可以選擇稍后回答其他時事通訊問題,這也將導致 API 添加一個新行,其中包含放置在不同列中的其他資料,但仍會顯示先前已知的現有資料。
為避免混亂,我想根據一列洗掉重復項并將最后一個條目保留在 Google 表格中。這導致洗掉舊的基本資料行并僅保留包含附加資料的行。為了突出顯示這是用戶“更新”的資料,我還突出顯示了這一行。用于將提交標記為重復的資料將基于用戶的電子郵件地址。因為這在兩種情況下都將保持不變。[我可能必須小心大寫和小寫字母,腳本不會將兩封電子郵件視為重復,我還沒有答案]
除此之外,我已經有一個腳本可以將當前時間和日期添加到添加的行中,并將其放在第一列。
對于重復的問題,我已經發現了一個類似的問題
我的問題如下:
目前,API 首次添加的一些新用戶也被突出顯示。我懷疑這與當電子郵件列的值為空時重復洗掉也有效這一事實有關。但是,鑒于我對這些問題的了解有限,這只是一個假設。
看到是這個例子:

長話短說
我希望這個腳本能夠按照我的預期作業,它只根據 E 列中的重復電子郵件地址洗掉重復項。如果重復洗掉腳本也忽略大寫,那就更好了。最后,它還忽略了 E 列中的空白條目。
我嘗試使用腳本洗掉基于一列的重復項并在谷歌表格中保留最新條目
并在此腳本中添加一些內容。像這樣的東西:
function removeDuplicates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName('Inzendingen');
var dt = sh.getDataRange().getValues();
var uA = [];
for (var i = dt.length - 1; i >= 0; i--) {
if (uA.indexOf(dt[i][4]) == -1 && dt.length !=0 ) {
uA.push(dt[i][4]);
} else {
sh.deleteRow(i 1);
sh.getRange(sh.getLastRow(),1,1,sh.getLastColumn()).setBackground('lightblue');
}
}
}
我認為添加&& dt.length !=0會向“if”發出信號,僅在存在重復且值/長度不為 0 時觸發。
uj5u.com熱心網友回復:
如果我理解正確,唯一的問題是這些新人沒有突出顯示電子郵件。我相信你在正確的軌道上,但你有dt.length != 0,它正在查看整個陣列。相反,您只想檢查電子郵件。
因此,您可以使用它:
dt[i][4].length != 0
或者
dt[i][4] != ""
編輯:我相信這會給出你想要的結果。空白電子郵件被忽略,重復電子郵件忽略大小寫。
function removeDuplicates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName('Inzendingen');
var dtAll = sh.getDataRange().getValues();
dt = dtAll.map(function(f){return [f[4].toLowerCase()]});
var uA = [];
for (var i = dt.length - 1; i >= 0; i--) {
if (uA.indexOf(dt[i][0]) == -1) {
uA.push(dt[i][0]);
Logger.log(uA[i]);
} else if (dt[i][0] != ""){
sh.deleteRow(i 1);
sh.getRange(sh.getLastRow(),1,1,sh.getLastColumn()).setBackground('lightblue');
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524641.html
