使用Google Apps Script对比单元格值与指定区域的函数问题排查
Google Sheets自定义函数修复:匹配A列与I列返回I1内容
原代码的问题出在这几点:
- 参数处理错误:调用
=TRYTHIS(A2)时传入的是A2的单个值,并非二维数组,原代码里的const [description] = one[0]会错误拆解值,比如A2是Test的话,one[0]会取到"T",最终description变成"T",完全偏离目标 - 未读取I列实际数据:
toString("Category!I2:I")只是将字符串转成字符串,相当于拿单元格值和"Category!I2:I"这个文本做对比,永远不可能匹配成功 - 返回内容错误:直接返回字符串"Category!I1",而非I1单元格里的实际内容
修正后的代码:
function TRYTHIS(targetValue) { // 获取当前电子表格 const ss = SpreadsheetApp.getActiveSpreadsheet(); // 定位到Category工作表 const categorySheet = ss.getSheetByName("Category"); // 读取I列从第2行开始的所有非空数据,转成一维数组方便判断 const columnIList = categorySheet.getRange(2, 9, categorySheet.getLastRow() - 1, 1).getValues().flat(); // 提前获取I1单元格的内容 const i1Text = categorySheet.getRange("I1").getValue(); // 检查目标值是否在I列列表里 if (columnIList.includes(targetValue)) { return i1Text; } // 不匹配就返回空 return ""; }
代码说明:
- 直接用
targetValue接收A2的单元格值,无需多余的解构操作 - 用
SpreadsheetApp正确读取Category表的I列数据,转成一维数组后用includes做存在性判断 - 预先获取I1的实际内容,匹配成功后直接返回该内容,完全符合需求
内容的提问来源于stack exchange,提问作者Heath
相关产品推荐
相关产品推荐

