Google Apps Script数组赋值报错:已声明数组仍提示未定义的解决方法
解决Apps Script中数组未定义的错误
嘿,我一眼就揪出问题所在啦!你的报错完全是变量名大小写不一致导致的~
你在代码里声明的写入数组是驼峰写法:
var tempList = new Array(rangeLength); // 这里是tempList
但在循环赋值时却写成了全小写:
templist[newRange] = currentCol; // 这里变成了templist
JavaScript是严格区分大小写的语言,这两个会被判定为完全不同的变量——你明明声明了tempList,但赋值的却是从未定义的templist,自然就触发了「数组未定义」的错误。
修正后的代码片段
把循环里的templist改成tempList就能解决问题,修正后的核心部分如下:
function assignMonitors(){ //统计每半小时的breakout monitors数量 var startCol = 9; //第I列是首个列出半小时时段的列 var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); if(ActiveSheet.getName() == "Calculator"){ //获取第13行、第9列至最后一列的数据: var colRange = ActiveSheet.getLastColumn() - startCol + 1; var row = 13; var WholeRange = ActiveSheet.getRange(row,startCol,1,colRange); var rangeLength = WholeRange.getWidth(); var allValues = WholeRange.getValues(); //这是读取数组 var tempList = new Array(rangeLength); //这是写入数组 for(var i = 0; i < rangeLength; i++){ var previousCell = ActiveSheet.getRange(row,(startCol+i-1)); var currentCol = ActiveSheet.getRange(13, (startCol + i)).getValue(); var cell = ActiveSheet.getRange(11,(startCol + i)); //获取剩余可用列数: var maxOffset = ActiveSheet.getLastColumn() - (startCol + i); //如果剩余可用列数大于8,则设为8: if(maxOffset > 8){ maxOffset = 8; } var newRange = 0; var writeRange = ActiveSheet.getRange(cell.getRow(), cell.getColumn(), 1, colRange); //这是写入数组的目标范围 //如果是首个时段列: if(i == 0){ for(newRange = 0; newRange < 9; newRange++){ tempList[newRange] = currentCol; // 这里修正了变量名大小写 } } // 补充你未写完的后续逻辑 } } }
额外的效率优化建议
顺便提个小细节:你的代码里频繁调用getRange()和getValue(),这类操作需要和Google Sheets服务器交互,次数多了会拖慢脚本速度。建议尽量一次性读取大范围数据到数组,在内存里处理完后再一次性写入,比如:
// 一次性读取第11-13行的目标列数据 var dataRange = ActiveSheet.getRange(11, startCol, 3, colRange); var dataValues = dataRange.getValues(); // 之后直接从数组取数:第13行第i列就是dataValues[2][i]
内容的提问来源于stack exchange,提问作者johngalt42
相关产品推荐
相关产品推荐

