使用Google Apps Script搜索谷歌表格时数字匹配失效问题求助
问题原因
你的代码里用了严格相等运算符===做匹配:
if (f[0] === searchtext)
当表格第一列是数字时,f[0]是数值类型,但网页表单提交的搜索文本searchtext是字符串类型。===会同时检查值和数据类型,类型不同就会判定不相等,导致数字内容搜不到。
解决方案
把比较的两边统一转成相同类型再匹配,推荐转成字符串(兼容纯字符、数字混合的场景),修改search函数里的判断条件即可:
修改后的完整代码
function doGet(e) { return HtmlService.createTemplateFromFile("Index").evaluate() .setTitle("WebApp: Search By Password") .addMetaTag('viewport', 'width=device-width, initial-scale=1') .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); } /* PROCESS FORM */ function processForm(formObject){ var concat = formObject.searchtext; var result = ""; if(concat){//Execute if form passes search text result = search(concat); } return result; } function search(searchtext = 'searchtext') { let ar = []; var spreadsheetId = '1aN8VLL4iKhGjmM84qhncG9cQfKigCWscMT-UkdzNhQs'; const names = ['Data', 'Data2']; names.forEach((name) => { var range = SpreadsheetApp.getActive().getSheetByName(name).getDataRange(); var data = range.getValues(); data.forEach(function (f) { // 统一转成字符串后再比较 if (String(f[0]) === String(searchtext)) { ar.push([f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],f[8],f[9]]); } }); }); return ar; };
额外优化提示
- 如果你的搜索列只会是数字,也可以把两边转成数值类型:
Number(f[0]) === Number(searchtext),但这种情况如果输入非数字内容会出错,所以转字符串更通用。 - 可以考虑忽略大小写(如果需要),比如改成
String(f[0]).toLowerCase() === String(searchtext).toLowerCase()
内容的提问来源于stack exchange,提问作者Abdullah Al-Esayi
相关产品推荐
相关产品推荐

