如何通过Google Apps Script找出列A有但列B没有的URL
找出Google表格中列A存在但列B不存在的URL
实现思路
- 先提取列B的所有URL,存入
Set集合(查找效率远高于数组) - 遍历列A的每个URL,判断是否不在列B的集合中
- 收集符合条件的URL,批量写入列C(减少Spreadsheet API调用次数,提升性能)
完善后的完整代码
function populateColumnC() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName("Sheet1"); const lastRow = sheet.getLastRow(); // 如果表格没有数据,直接返回 if (lastRow < 2) return; // 设置列C标题 sheet.getRange(1, 3).setValue('Listed in A but not in B'); // 获取列A和列B的所有值(从第2行开始) const columnAValues = sheet.getRange(2, 1, lastRow - 1).getValues().flat(); // 转成一维数组 const columnBValues = sheet.getRange(2, 2, lastRow - 1).getValues().flat(); // 将列B的值存入Set,用于快速查找 const bUrlSet = new Set(columnBValues.filter(url => url !== "")); // 过滤空值 // 收集列A中存在但列B中不存在的URL const result = columnAValues.filter(url => url !== "" && !bUrlSet.has(url)); // 清空列C原有数据(从第2行开始) sheet.getRange(2, 3, lastRow - 1).clearContent(); // 将结果写入列C if (result.length > 0) { sheet.getRange(2, 3, result.length, 1).setValues(result.map(url => [url])); } }
代码关键说明
- 使用Set优化查找:
Set的has()方法时间复杂度为O(1),比数组indexOf()的O(n)效率高,数据量越大优势越明显 - 批量读写数据:避免在循环中逐个调用
setValue(),改用getValues()和setValues()批量操作,减少API调用次数 - 过滤空值:排除列中为空的单元格,避免无效判断
- 清空原有数据:每次运行前清空列C的旧结果,避免数据残留
内容的提问来源于stack exchange,提问作者Arif Ahmed
相关产品推荐
相关产品推荐

