如何解决Google Apps Script函数返回null的问题?
问题解决:Google Apps Script函数调用返回null的问题
我是编程新手,英文水平不佳,若表述有误请见谅。我编写了如下代码,直接用Logger.log测试
SearchAttributebyName函数时运行正常,但通过trythebot函数调用该函数时,始终返回null,恳请帮忙解决。
原代码:
function SearchAttributebyName(ID){ var SheetDatabase = SpreadsheetApp.openById("SS ID"); var Sheet = SheetDatabase.getSheetByName("Sheet1"); var Cell = Sheet.getRange("A3:A"); var Value = Cell.getValues().map(x => x[0]); Logger.log(Value.length); Value.forEach((elements, i) => { if (elements == ID) { let baris = i + 3; let name = Sheet.getRange(baris,1,1,1).getValues(); let A= Sheet.getRange(baris,15,1,1).getValues(); let B= Sheet.getRange(baris,16,1,1).getValues(); let C= Sheet.getRange(baris,17,1,1).getValues(); let D= Sheet.getRange(baris,4,1,1).getValues(); let E= Sheet.getRange(baris,21,1,1).getValues(); let F= Sheet.getRange(baris,22,1,1).getValues(); let G= Sheet.getRange(baris,11,1,1).getValues(); let H= Sheet.getRange(baris,12,1,1).getValues(); let I= Sheet.getRange(baris,7,1,1).getValues(); let J= Sheet.getRange(baris,8,1,1).getValues(); let K= Sheet.getRange(baris,9,1,1).getValues(); let L= Sheet.getRange(baris,27,1,1).getValues(); let M= Sheet.getRange(baris,5,1,1).getValues(); return "✅ DATA OF " + name + ": " + "\n" + "\n" + "DataA : " + A+ "\n" + "DataB : " + B + "\n" + "DataC : " + C + "\n" + "DataD : " + D + "\n" + "DataE : " + E + "\n" + "DataF : " + F + "\n" + "DataG : " + G + "\n" + "DataH : " + H + "\n" + "DataI: " + I + "\n" + "DataJ : " + J + "\n" + "DataK : " + K + "\n" + "DataL : " + L + "\n" + "DataM : " + M; } return "DATA NOT FOUND"; }); } function trythebot() { Logger.log(SearchAttributebyODPName("XXXXXXX")); }
修复步骤及原因
- 修正函数名拼写错误:
trythebot中调用的SearchAttributebyODPName是不存在的函数,实际定义的函数是SearchAttributebyName,名字不匹配导致调用失败返回null。 - 替换
forEach为可返回结果的遍历方式:forEach仅用于遍历数组,不会将内部return的值传递给外部函数,因此原SearchAttributebyName函数没有明确返回值,默认返回null。改用普通for循环找到匹配项后直接返回结果。 - 优化单元格读取性能:多次调用
getRange().getValues()会频繁请求Spreadsheet服务,降低执行效率。改为一次性获取所有行数据,再按需提取对应列的值。
修复后的代码
function SearchAttributebyName(ID){ var SheetDatabase = SpreadsheetApp.openById("SS ID"); var Sheet = SheetDatabase.getSheetByName("Sheet1"); // 获取A3到最后一行的所有数据,避免读取空行 var dataRange = Sheet.getRange(3, 1, Sheet.getLastRow() - 2, Sheet.getLastColumn()); var allData = dataRange.getValues(); // 遍历查找匹配的ID for (let i = 0; i < allData.length; i++) { const row = allData[i]; if (row[0] == ID) { // 提取对应列的数据(数组索引从0开始,列号需减1) const name = row[0]; const A = row[14]; // 第15列 const B = row[15]; // 第16列 const C = row[16]; // 第17列 const D = row[3]; // 第4列 const E = row[20]; // 第21列 const F = row[21]; // 第22列 const G = row[10]; // 第11列 const H = row[11]; // 第12列 const I = row[6]; // 第7列 const J = row[7]; // 第8列 const K = row[8]; // 第9列 const L = row[26]; // 第27列 const M = row[4]; // 第5列 return "✅ DATA OF " + name + ": " + "\n\n" + "DataA : " + A + "\n" + "DataB : " + B + "\n" + "DataC : " + C + "\n" + "DataD : " + D + "\n" + "DataE : " + E + "\n" + "DataF : " + F + "\n" + "DataG : " + G + "\n" + "DataH : " + H + "\n" + "DataI: " + I + "\n" + "DataJ : " + J + "\n" + "DataK : " + K + "\n" + "DataL : " + L + "\n" + "DataM : " + M; } } // 未找到匹配项时返回提示 return "DATA NOT FOUND"; } function trythebot() { // 修正函数名,调用正确的函数 Logger.log(SearchAttributebyName("XXXXXXX")); }
内容的提问来源于stack exchange,提问作者Angely Fransiska
相关产品推荐
相关产品推荐

