使用TextFinder定位含公式列数字时遭遇部分匹配问题
解决TextFinder匹配公式中完整数值项的问题
当前你的脚本遇到两个问题:要么TextFinder会部分匹配公式里的数字(比如找160会命中160.76里的160,找12会命中112.92里的12);开了matchEntireCell(true)又完全找不到公式里的数值。核心是要定位公式里独立的数值项——也就是被=、+、-这些运算符或者单元格首尾包裹的完整数值。
直接用正则表达式匹配就能解决,修改后的代码如下:
function extractFormulas(amount) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("June"); const lrow = sheet.getLastRow(); const receiptsRange = sheet.getRange("C4:C"+lrow); var targetNum = -amount; if (amount <= 0) { // 银行账单里支出是负数 // 构造正则:只匹配独立的数值项,支持目标数字是整数或小数的整数部分 const regex = new RegExp(`(^|\\+|-)${targetNum}(\\.|$|\\+|-)`, 'g'); const result = receiptsRange.createTextFinder(regex) .matchFormulaText(true) .useRegularExpression(true) .findNext(); if (result) { return result.offset(0, -1).getValue(); // 返回左边相邻单元格的内容 } else { return "not found"; } } else { return "deposit"; } }
正则规则说明
(^|\+|-): 匹配公式开头、加号或减号,保证要找的数值是一个独立运算项的开头${targetNum}: 你要查找的目标数字(比如160、12)(\.|$|\+|-): 匹配小数点、公式结尾、加号或减号,确保后面要么是小数部分,要么是下一个运算项,不会把其他数字里的片段当成匹配项
调整后效果:
- 找160时,会精准命中公式里的
160.76这个完整数值项,不会误匹配其他包含160的非独立数字 - 找12时,只会匹配以12开头的独立数值(比如12.34),不会再命中
112.92里的12片段
内容的提问来源于stack exchange,提问作者tikitour
相关产品推荐
相关产品推荐

