Google Sheets按钮绑定脚本提示Script Function Could not be found问题咨询
问题原因
- 你写的所有业务函数(
ClearCell/SubmitData/Search/UpdateData/Delete)全部被嵌套在顶层的myFunction函数内部,属于局部作用域函数。Google Sheets的按钮绑定功能只能识别全局作用域下的顶层函数,自然无法找到这些嵌套的函数,这是报错的核心原因。 - 代码中还存在两处语法错误,会导致后续运行失败:
Delete函数中spreadsheetApp.get.Ui()拼写错误,正确写法为SpreadsheetApp.getUi()Delete函数中ui.ButtonSet.Yes_No枚举值错误,正确写法为ui.ButtonSet.YES_NO
修复后的完整代码
// 清空表单 function ClearCell() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var formS = ss.getSheetByName("Entry Form"); // 表单页 var rangesToClear = ["b7","d7","f7","h7","b9","d9","f9","h9","b12"]; for (var i=0; i<rangesToClear.length; i++) { formS.getRange(rangesToClear[i]).clearContent(); } } //----------------------------------------------------------------------------------- // 提交数据 function SubmitData() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var formS = ss.getSheetByName("Entry Form"); // 表单页 var dataS = ss.getSheetByName("Traffic Discrepancy Log"); // 数据存储页 var values = [[formS.getRange("b7").getValue(), formS.getRange("d7").getValue(), formS.getRange("f7").getValue(), formS.getRange("h7").getValue(), formS.getRange("b9").getValue(), formS.getRange("d9").getValue(), formS.getRange("f9").getValue(), formS.getRange("h9").getValue(), formS.getRange("b12").getValue()]]; dataS.getRange(dataS.getLastRow()+1,1,1,9).setValues(values); ClearCell(); } //--------------------------------------------------------------------------------- // 搜索记录 var SEARCH_COL_IDX = 0; function Search(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var formS = ss.getSheetByName("Entry Form"); // 表单页 var str = formS.getRange("B4").getValue(); var values = ss.getSheetByName("Traffic Discrepancy Log").getDataRange().getValues(); for (var i=0; i<values.length;i++){ var row = values[i]; if (row[SEARCH_COL_IDX] == str){ formS.getRange("b7").setValue(row[0]), formS.getRange("d7").setValue(row[1]), formS.getRange("f7").setValue(row[2]), formS.getRange("h7").setValue(row[3]), formS.getRange("b9").setValue(row[4]), formS.getRange("d9").setValue(row[5]), formS.getRange("f9").setValue(row[6]), formS.getRange("h9").setValue(row[7]), formS.getRange("b12").setValue(row[8]); } } } //------------------------------------------------------------------------------------ // 更新数据 function UpdateData(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var formS = ss.getSheetByName("Entry Form"); // 表单页 var dataS = ss.getSheetByName("Traffic Discrepancy Log"); // 数据存储页 var str = formS.getRange("B4").getValue(); var values = ss.getSheetByName("Traffic Discrepancy Log").getDataRange().getValues(); for (var i=0; i<values.length; i++){ var row = values[i]; if (row[SEARCH_COL_IDX] == str){ var INT_R = i+1 var values1 = [[formS.getRange("b7").getValue(), formS.getRange("d7").getValue(), formS.getRange("f7").getValue(), formS.getRange("h7").getValue(), formS.getRange("b9").getValue(), formS.getRange("d9").getValue(), formS.getRange("f9").getValue(), formS.getRange("h9").getValue(), formS.getRange("b12").getValue()]]; dataS.getRange(INT_R,1,1,9).setValues(values1); SpreadsheetApp.getUi().alert('数据已更新'); ClearCell(); } } } //------------------------------------------------------------------------------------ // 删除数据 function Delete() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var formS = ss.getSheetByName("Entry Form"); // 表单页 var dataS = ss.getSheetByName("Traffic Discrepancy Log"); // 数据存储页 var ui = SpreadsheetApp.getUi(); var response = ui.alert('确认删除?',ui.ButtonSet.YES_NO); // 处理用户确认操作 if (response == ui.Button.YES) { var str = formS.getRange("B4").getValue(); var values = ss.getSheetByName("Traffic Discrepancy Log").getDataRange().getValues(); for (var i = 0; i <values.length; i++) { var row = values[i]; if (row[SEARCH_COL_IDX] == str) { var INT_R = i+1 dataS.deleteRow(INT_R) ; ClearCell(); } } } }
后续操作步骤
- 替换原有代码后保存Apps Script项目
- 给对应按钮分配脚本时,直接填写对应函数名即可,不需要加括号,比如清除按钮填
ClearCell、提交按钮填SubmitData - 首次点击按钮时按提示完成脚本授权即可正常使用
内容的提问来源于stack exchange,提问作者Gerry P.
相关产品推荐
相关产品推荐

