如何用Office Script获取Excel中去重后的F列所有值?
解决Office Script获取F列去重后所有值的问题
问题原因
你当前使用getUsedRange().getValue()仅能获取第一行值,核心原因是:
- 若调用的是工作表的
getUsedRange(),返回的是整个工作表的已用区域,并非F列单独的数据; - 即使针对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
相关产品推荐
相关产品推荐

