运行Google Apps Script填充表格列时报错TypeError: value is not a functionDetails如何解决
报错原因
- 核心触发原因:代码中
NewFillValue = value(0)写法错误。currentRange.getValues()返回的是二维数组,遍历得到的value是存储单行值的数组,读取数组元素需要用方括号[],你用了圆括号(),这是函数调用的语法,因此系统误认为你要把value作为函数执行,抛出该类型错误。 - 其他附带语法/逻辑错误:
- 函数定义缺失必要格式:开头
functionfillvaluedown()缺少function关键字和函数名之间的空格,也没有函数体开头的左大括号{ - 写入数据方法调用错误:
currentRange.setValue()仅支持为整个范围设置同一个值,你传入的是二维数组,需要使用setValues()(复数形式)才能批量写入对应单元格 - 边界逻辑缺陷:如果B列起始行B2本身是空值,首次处理空白单元格时
NewFillValue还未赋值,会写入无效的undefined
- 函数定义缺失必要格式:开头
修复后的完整代码
function fillvaluedown() { var myGooglSheet = SpreadsheetApp.getActiveSpreadsheet(); // 未使用的shUserForm变量可自行删除 // var shUserForm = myGooglSheet.getSheetByName("User Form"); var datasheet = myGooglSheet.getSheetByName("Database"); var currentRange = datasheet.getRange("b2:b" + datasheet.getLastRow()); var newRange = []; var NewFillValue = ""; // 初始化填充值,避免B2为空时出现无效值 currentRange.getValues().map(function(value) { if (value[0] !== '') { NewFillValue = value[0]; // 改为方括号读取数组元素 newRange.push([NewFillValue]); } else { newRange.push([NewFillValue]); } }); currentRange.setValues(newRange); // 改为setValues批量写入二维数组 }
内容的提问来源于stack exchange,提问作者Vikram SRTC
相关产品推荐
相关产品推荐

