如何修改Google Apps Script实现完全丢弃重复行仅留唯一行?
解决方案:保留仅出现一次的行
一、修改Google Apps Script脚本
原脚本仅移除重复实例、保留唯一行的一份拷贝,要实现只保留从未重复过的行,可以修改为先统计每行的出现次数,再筛选出仅出现一次的行:
function keepOnlyUniqueRows() { const sheet = SpreadsheetApp.getActiveSheet(); const data = sheet.getDataRange().getValues(); // 统计每行的出现次数(用|分隔字段,避免字段含逗号导致误判) const rowCount = new Map(); data.forEach(row => { const rowKey = row.join('|'); rowCount.set(rowKey, (rowCount.get(rowKey) || 0) + 1); }); // 筛选仅出现一次的行 const uniqueRows = data.filter(row => { const rowKey = row.join('|'); return rowCount.get(rowKey) === 1; }); // 清空表格并写入结果 sheet.clearContents(); if (uniqueRows.length > 0) { sheet.getRange(1, 1, uniqueRows.length, uniqueRows[0].length).setValues(uniqueRows); } }
关键改动说明:
- 用
Map统计每行出现次数,比原脚本的嵌套循环效率更高,适合大数据量场景 - 用
|作为字段分隔符,避免因单元格内容含逗号导致不同行被误判为重复 - 最后只保留计数为1的行,完全丢弃所有出现过多次的行
二、使用Google Sheets公式实现
如果不想写脚本,直接用内置公式也能实现:
方法1:QUERY函数
假设数据在A:C列,在空白列(比如E1)输入:
=ARRAYFORMULA(QUERY(A:C, "select * where count(A) = 1 group by A,B,C", 1))
- 参数
1表示数据包含表头,若没有表头可改为0 - 原理:按整行分组,只保留分组后计数为1的行
方法2:FILTER+COUNTIFS函数
同样针对A:C列,输入:
=FILTER(A:C, ARRAYFORMULA(COUNTIFS(A:A, A:A, B:B, B:B, C:C, C:C) = 1))
- 原理:用
COUNTIFS统计每行的出现次数,再用FILTER筛选出次数为1的行
内容的提问来源于stack exchange,提问作者user12736831
相关产品推荐
相关产品推荐

