如何解决使用Apps脚本用Google表格中的新数据替换重复的行
所以,情况就这样。我有一张工作表正在从我的WooCommerce商店中提取一些数据。它每小时获取所有订单的详细信息并保存。
现在,当我的商店中的订单状态更改时,将在工作表中添加具有相同订单ID的新行,我想用这个新行替换工作表中的旧行。我四处寻找删除重复项,并发现以下功能。这是可行的,但问题是它将删除新行并保留现有行。但是,我想删除现有的并保留新的。我想根据工作表的第15个索引中的订单ID检查重复项。
function removeDuplicates() {
var sheet = SpreadsheetApp.getActive().getSheetByName("Orders");
var data = sheet.getDataRange().getValues();
var newData = [];
for (var i in data) {
var row = data[i];
var duplicate = false;
for (var j in newData) {
if(row[15] == newData[j][15]){
duplicate = true;
}
}
if (!duplicate) {
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1,1,newData.length,newData[0].length).setValues(newData);
}
任何帮助将不胜感激。谢谢。
解决方法
说明:
您的代码从第一行开始扫描,直到到达数据的最后一行。所有唯一项都存储在newData
数组中。当它多次出现在同一项目上时,由于已将其添加到数组中,因此它只是忽略了它。
您的目标是保留新记录。后者应由日期列定义。因此,在执行for循环之前,可以按降序的顺序sort
按日期排列数组;即保留新记录(首次出现),并忽略所有不需要的其他重复项。例如,如果 B列是表示记录添加时间的日期/日期时间列,则可以简单地对数据进行如下排序:
sheet.getDataRange().sort({column: 2,ascending: false}) // replace 2 with your date column
解决方案:
function removeDuplicates() {
var sheet = SpreadsheetApp.getActive().getSheetByName("Orders");
var data = sheet.getDataRange().getValues();
sheet.getDataRange().sort({column: 2,ascending: false}) // replace 2 with your date column
var newData = [];
for (var i in data) {
var row = data[i];
var duplicate = false;
for (var j in newData) {
if(row[15] == newData[j][15]){
duplicate = true;
}
}
if (!duplicate) {
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1,1,newData.length,newData[0].length).setValues(newData);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。