为何我的Array返回部分值?textFinder获取员工ID异常排查
问题:textFinder返回数据后,cslData[0]取到的是字符串首字符而非员工ID
我尝试使用textFinder从recordsSheet中获取数据,期望cslData[0]返回员工ID编号(如"100###5"),但实际返回的是字符串值的第0位字符。

相关代码
textFinder函数
function textFinder(findID){ var recordData; var findRecord = recordsSheet.createTextFinder(findID); var foundRange = findRecord.findNext(); var fRng = recordsSheet.getRange(foundRange.getRow(),1,1,9) while(null != foundRange){ recordData.push(fRng.getValues()); foundRange = findRecord.findNext(); } return(recordData); }
onFormSubmit函数
var ss = SpreadsheetApp.getActiveSpreadsheet(); var recordsSheet = ss.getSheetByName("Active Records"); function onFormSubmit(e) { var eRng = e.range; var eRow = eRng.getRow(); var colA = ss.getRange('A' + eRow).getValue() //表单响应的第二个值在A列 Logger.log("Call txt finder") var cslData = textFinder(colA).toString().split(",").join(); Logger.log("cslData: " + cslData) Logger.log("cslData[0]: " + cslData[0]) Logger.log("cslData[1]: " + cslData[1]) Logger.log("cslData[2]: " + cslData[2]) Logger.log("cslData[0][0]: " + cslData[0][0]) }
问题原因
- textFinder初始化错误:
recordData未初始化为数组,直接调用push会触发报错;且循环内fRng仅获取第一次匹配行的范围,后续循环不会更新目标行数据。 - 数据处理逻辑错误:把
textFinder返回的数组用toString()转为字符串,再通过split(",").join()去除逗号,最终cslData变成了字符串而非数组,此时cslData[0]自然取到的是字符串的第一个字符。
修复方案
1. 修正textFinder函数
function textFinder(findID){ var recordData = []; // 初始化空数组 var findRecord = recordsSheet.createTextFinder(findID); var foundRange = findRecord.findNext(); while(foundRange !== null){ // 每次循环获取当前匹配行的1-9列数据,转成一维数组存入结果 var rowData = recordsSheet.getRange(foundRange.getRow(), 1, 1, 9).getValues()[0]; recordData.push(rowData); foundRange = findRecord.findNext(); } return recordData; }
2. 修正onFormSubmit中的数据处理
function onFormSubmit(e) { var eRow = e.range.getRow(); var colA = ss.getRange('A' + eRow).getValue(); Logger.log("Call txt finder"); var cslData = textFinder(colA); if(cslData.length > 0){ Logger.log("cslData: " + cslData); Logger.log("员工ID(cslData[0][0]): " + cslData[0][0]); // 第一条匹配记录的第一列是员工ID Logger.log("cslData[0]: " + cslData[0]); // 第一条匹配记录的所有数据 } else { Logger.log("未找到匹配的记录"); } }
说明
修正后的textFinder返回二维数组,每个元素是匹配行的一维数据集合;在onFormSubmit中直接用数组索引访问,cslData[0][0]即可获取第一条记录的员工ID,cslData[0]则是第一条记录的全部数据。
内容的提问来源于stack exchange,提问作者imthatonegirl
相关产品推荐
相关产品推荐

