You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script提取唯一值结果不唯一问题求助

解决Google Apps Script统计唯一值次数重复的问题

问题根源

你的代码应该是直接遍历了「Data」工作表L列的所有行,将每个值直接添加到结果数组中,未做去重计数处理,所以最终写入「Summary」的是原始数据的重复值,而非预期的「唯一值+对应次数」格式。

修正后的实现代码

以下是符合需求的代码,同时预留了后续改为通用函数的扩展性:

function countUniqueValues() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName('Data');
  const summarySheet = ss.getSheetByName('Summary');
  
  // 获取L列非空数据(默认从第2行开始,假设第1行是表头)
  const lColumnData = dataSheet.getRange('L2:L').getValues().flat().filter(val => val !== '');
  
  // 用Map统计每个值的出现次数
  const countMap = new Map();
  lColumnData.forEach(val => {
    countMap.set(val, (countMap.get(val) || 0) + 1);
  });
  
  // 转换为数组并按次数降序排序
  const sortedResult = Array.from(countMap.entries()).sort((a, b) => b[1] - a[1]);
  
  // 清空Summary工作表C、D列原有数据(从第2行开始)
  summarySheet.getRange('C2:D').clearContent();
  
  // 将结果写入C、D列(C列存唯一值,D列存对应次数)
  if (sortedResult.length > 0) {
    summarySheet.getRange(2, 3, sortedResult.length, 2).setValues(sortedResult);
  }
}

通用函数改造(支持任意列)

如果要扩展为可处理任意列的通用函数,只需将目标列名作为参数传入即可:

function countColumnUniqueValues(targetColumn, writeStartCol = 3) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName('Data');
  const summarySheet = ss.getSheetByName('Summary');
  
  // 获取目标列非空数据(从第2行开始)
  const columnData = dataSheet.getRange(`${targetColumn}2:${targetColumn}`).getValues().flat().filter(val => val !== '');
  
  const countMap = new Map();
  columnData.forEach(val => {
    countMap.set(val, (countMap.get(val) || 0) + 1);
  });
  
  const sortedResult = Array.from(countMap.entries()).sort((a, b) => b[1] - a[1]);
  
  // 清空目标写入区域原有数据
  summarySheet.getRange(2, writeStartCol, summarySheet.getLastRow() - 1, 2).clearContent();
  
  // 写入统计结果
  if (sortedResult.length > 0) {
    summarySheet.getRange(2, writeStartCol, sortedResult.length, 2).setValues(sortedResult);
  }
}

// 调用示例:统计L列,写入C、D列
countColumnUniqueValues('L');
// 调用示例:统计A列,写入E、F列
countColumnUniqueValues('A', 5);

核心逻辑说明

  • 用Map自动处理唯一值统计,避免手动去重的繁琐
  • flat()将getValues()返回的二维数组转为一维,简化遍历
  • filter(val => val !== '')过滤列中的空单元格
  • sort((a, b) => b[1] - a[1])实现按出现次数降序排序
  • 写入前清空目标区域,避免旧数据残留

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 10:26:04