javascript - 使用 Google App Scripts 删除重复行
问题描述
我有一个带有两个标签的 Google 表格,我想检查行并从中删除重复项。但是,两者的要求略有不同。
在提交匹配选项卡上,我将数据从 Google 表单导入到 A:C 列中,其中表单提交的脚本然后从 API 获取数据并填充 D:J,最后,K:M 通过脚本插入了一个自定义公式。数据范围为 A2:M
我遇到的问题是a)我对所有这些都是新手,b)当我尝试删除重复项时(人们可以从表单中提交两次相同的东西)我找到的唯一解决方案复制了所有行,删除重复项并再次粘贴唯一行,因此我丢失了公式。
我让脚本检查 B 列(这只是一个来自 AZ 的字母)和 C 列(唯一 ID)是否存在重复项,例如,如果第 2 行和第 3 行在 B 列中有“A”,在 C 列中有“123456”,那么这是重复的。作为参考,这是我的工作:
function removeDuplicates() {
var sheet = SpreadsheetApp.getActiveSheet();
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[2] == newData[j][2] && row[3] == newData[j][3]){
duplicate = true;
}
}
if (!duplicate) {
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
我需要做的是脚本检查基于列 B 和 C 中的数据的重复行并将其删除,但必须保留 K:M 中的公式。通过仅从 A:J 中删除数据或通过其他方法。
此外,我假设我需要确保这仅在“submittedMatches”选项卡上运行,而不是在工作表上的其他选项卡上运行。
解决方案
我解决了这个问题。对不起。经过数小时的尝试后,您最终寻求帮助的方式总是如此。
我在 B 和 C 上设置了条件格式: =countifs($B$1:$B1,$B1,$C$1:$C1,$C1)>1
我将背景颜色设置为#fefefe,并将字体设置为红色和粗体。然后我添加了以下脚本来检查具有#fefefe 背景的单元格并将其删除。
function deleteDuplicateMatches() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName('submittedMatches');
//Only get range with data (non-empty cells)
var firstCol = sheet.getDataRange();
//Save data validation rules based on the first row
var dataValRules = sheet.getRange('A2:M2').getDataValidations();
var maxRow = firstCol.getNumRows();
for (var row=1; row<=maxRow; row++){
//Delete row with background color of gray #fefefe
if(sheet.getRange(row,1).getBackground() == "#fefefe"){
sheet.deleteRow(row);
//since current row was deleted adjust current data set
//this will handle scenarios with succeeding duplicates
row--;
maxRow--;
//insert new row at the end and set data validation rules
sheet.insertRowAfter(maxRow);
sheet.getRange(maxRow,1,1,13).setDataValidations(dataValRules);
}
}
};
推荐阅读
- java - 如何在 RestController 中获取标头值并将其传递给父控制器
- javascript - 如何在单元测试之前等待组件的挂载回调中的异步调用完成?
- reactjs - 在反应js中的路线更改调用一个函数
- python - PyGears - 无法运行脚本,PYPY 未定义
- express - 在 MERN 堆栈中运行 express
- c# - NpgsqlConnection 不读取继承的 DTO 类的 jsonb 列
- vba - 使用 ItemAdd 移动电子邮件
- r - R - In sqrt(1 - h * h) :从 rcorr 内部产生的 NaN - 可用的完整样本数据
- r - 我正在尝试在 R 循环中制作单独的图表,但每个图表都使用相同的数据(我列表中的最后一个元素)
- javascript - 如何使用 HTML 节点作为插槽?