google-apps-script - 重复数据删除行的工作表脚本:意外行为
问题描述
我有一个脚本,它将数据从一张表发布到另一张表,然后对数据进行重复数据删除。重复数据删除脚本似乎只对部分数据进行重复数据删除。例如,第 2-13 行仍然是重复的,而第 35 行之后的行被重复数据删除。顶部的行是从插入脚本发布的。
我怎样才能让脚本:
a) 对所有数据进行重复数据删除。
b) 删除从插入脚本发布的新重复行,而不是已经存在的行。
我已经尝试设置要检查的工作表的全部范围,但这似乎会干扰新数据的发布。这是我设法找到/开发的最简单的脚本。
function Run(){
insert();
dedupe();
}
function insert() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var source = ss.getSheetByName('Candidate Refresh'); // change here
var des = ss.getSheetByName('Candidate Listing'); // change here
var sv = source
.getDataRange()
.getValues();
sv.shift();
des.insertRowsAfter(1, sv.length);
des.getRange(2, 1, sv.length, source.getLastColumn()).setValues(sv);
}
function dedupe() {
var sheet = SpreadsheetApp.getActive().getSheetByName('Candidate Listing');
var data = sheet.getDataRange().getValues();
var newData = new Array();
for(i in data){
var row = data[i];
var duplicate = false;
for(j in newData){
if(row.join() == newData[j].join()){
duplicate = true;
}
}
if(!duplicate){
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length,
newData[0].length).setValues(newData);
}
我希望发布新数据,检查所有数据是否重复,如果发现脚本重复,则删除脚本发布的新数据。
解决方案
所以我认为我的原始帖子确实从重复数据删除的角度工作,但我还需要它只查看一个值,所以我发现下面的脚本这样做效果更好。
function removeDuplicates() {
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getLastRow();
var firstColumn = sheet.getRange(1, 2, rows, 1).getValues();
firstColumn = firstColumn.map(function (e) {return e[0]})
for (var i = rows; i >0; i--) {
if (firstColumn.indexOf(firstColumn[i-1]) != i-1) {
sheet.deleteRow(i);
}
}
}
推荐阅读
- elasticsearch - 使用 Postman 创建 ElasticSearch 索引时出错
- snowflake-cloud-data-platform - 共享集群物化视图权限错误 - 角色的默认权限不是视图或表
- angular - 使用 Angular 7 对嵌套的 HTTP 调用进行单元测试
- python - PermissionError: [WinError 5] 而不是 IsADirectoryError
- android-studio - Android Studio 3.5 中的 gridlayouts 属性
- python - 尝试使用 Python 发送电子邮件时解决 AttributeError 问题?
- laravel - 如何排列数组的数据?
- neural-network - 从 Pytorch 中的序列化模型获取 state_dict 时出错
- c# - IIS express 中的 C# WEB API 项目 TLS 1.2 设置
- javascript - 网站不同页面的不同聊天(Socket.io 和 Node.js)