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

如何用Office Script获取Excel中去重后的F列所有值?

解决Office Script获取F列去重后所有值的问题

问题原因

你当前使用getUsedRange().getValue()仅能获取第一行值,核心原因是:

  1. 若调用的是工作表的getUsedRange(),返回的是整个工作表的已用区域,并非F列单独的数据;
  2. 即使针对F列调用getRange("F:F").getUsedRange(),去重后F列会存在空行,getValue()会返回包含空值的所有单元格,若未过滤空值,会误以为只拿到第一行有效数据。

解决方案

以下两种方法可获取F列去重后的所有有效值:

方法一:定位F列最后非空行,过滤空值

let selectedSheet = workbook.getWorksheet("Sheet1");
// 保留你的原有操作逻辑
selectedSheet.getRange("F:F").insert(ExcelScript.InsertShiftDirection.right);
selectedSheet.getRange("F:F").copyFrom(selectedSheet.getRange("E:E"));
selectedSheet.getRange("$F:$F").removeDuplicates([0], false);

// 获取F列最后一个非空单元格的行号(行索引从0开始,需加1转为实际行号)
const lastRow = selectedSheet.getRange("F:F").getLastCell().getRowIndex() + 1;
// 获取F列有数据的范围
const uniqueRange = selectedSheet.getRange(`F1:F${lastRow}`);
// 提取值并过滤空行
const uniqueValues = uniqueRange.getValues().flat().filter(value => value !== "");
// 输出结果
console.log(uniqueValues);

方法二:直接获取F列非空单元格

利用getSpecialCells()筛选出F列的常量单元格(去重后有效数据属于常量):

let selectedSheet = workbook.getWorksheet("Sheet1");
// 原有操作逻辑不变
selectedSheet.getRange("F:F").insert(ExcelScript.InsertShiftDirection.right);
selectedSheet.getRange("F:F").copyFrom(selectedSheet.getRange("E:E"));
selectedSheet.getRange("$F:$F").removeDuplicates([0], false);

// 获取F列所有非空常量单元格
const nonEmptyCells = selectedSheet.getRange("F:F").getSpecialCells(ExcelScript.SpecialCellType.cellTypeConstants);
// 提取所有值
const uniqueValues = nonEmptyCells.getValues().flat();
console.log(uniqueValues);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:22:44