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

如何使findAll函数支持处理4位及以上位数的货币金额查找?

如何使findAll函数支持处理4位及以上位数的货币金额查找?

这个问题其实是Google Sheets里数值存储与显示分离导致的,我来给你拆解下原因和解决办法:

问题根源

Google Sheets里设置了货币格式的单元格,实际存储的是纯数值(比如1234.56),但显示给用户的是格式化后的字符串(比如$1,234.56)。你的原函数里:

  • 当用单元格引用(比如=findInAllSheets(A1))传值时,函数拿到的是单元格存储的原始数值,但createTextFinder查找的是单元格显示的格式化文本,两者不匹配,所以找不到结果。
  • 当你用引号传字符串(比如=findInAllSheets("1,234.56"))时,传的是和显示文本一致的内容,自然能匹配到。

解决方案:让函数自动适配数值转格式化文本

我们可以修改函数,自动判断输入类型,把数值转换成和单元格显示一致的格式化字符串,再进行查找。这里给你两个实用的版本:

版本1:适配通用货币格式

如果你的货币格式是固定的(比如$#,##0.00),可以直接用这个版本,不管输入是单元格引用还是纯数值,都能自动转换:

function findInAllSheets(text) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  let searchText = text;
  
  // 如果输入是数值,转换为带千分位的货币格式字符串
  if (typeof text === 'number') {
    // 格式可根据你的实际需求调整,比如去掉$符号就改成"%.2f"再加千分位
    searchText = Utilities.formatString("$%.2f", text).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  }

  const textFinder = ss.createTextFinder(searchText);
  const allOccurrences = textFinder.findAll();
  
  const locationList = allOccurrences.map(item => {
    return {sheet: item.getSheet().getName(), cell: item.getA1Notation()};
  });

  console.log(locationList.map(object => object.cell));
  return [[locationList.map(object => object.cell).join()]];
}

版本2:动态适配单元格格式(更灵活)

如果你的表格里有多种货币格式,或者不确定格式,这个版本可以直接读取输入单元格的格式,动态转换数值:

function findInAllSheets(input) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  let searchText = input;
  
  // 处理单元格引用的情况:读取单元格的数值和格式,转换为显示文本
  if (input instanceof Range) {
    const cellValue = input.getValue();
    const cellFormat = input.getNumberFormat();
    searchText = Utilities.formatString(cellFormat, cellValue);
  } 
  // 处理直接传数值的情况:用默认货币格式转换
  else if (typeof input === 'number') {
    searchText = Utilities.formatString("$#,##0.00", input);
  }

  const textFinder = ss.createTextFinder(searchText);
  const allOccurrences = textFinder.findAll();
  
  const locationList = allOccurrences.map(item => {
    return {sheet: item.getSheet().getName(), cell: item.getA1Notation()};
  });

  console.log(locationList.map(object => object.cell));
  return [[locationList.map(object => object.cell).join()]];
}

使用说明

  • 版本1适合格式固定的场景,直接用单元格引用(比如=findInAllSheets(A1))就能正常查找;
  • 版本2更灵活,甚至可以直接传入单元格对象(比如在脚本里调用findInAllSheets(ss.getRange("A1"))),完全适配单元格的格式。

备注:内容来源于stack exchange,提问作者Robert Softley Gale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:04:34