如何解决Google Apps Script报sheet.getDataRange is not a function错误
问题根源
你的报错来自参数传递逻辑错误:
autoSort函数要求传入的参数是单个工作表(Sheet)实例,只有 Sheet 实例才有getDataRange方法- 但你在
onOpen触发函数里调用autoSort时,传入的是event.source,这个是整个电子表格文件(Spreadsheet)实例,该实例没有getDataRange方法,因此触发类型错误 - 额外的逻辑漏洞:你已经在
onOpen里通过getSheetByName获取了目标工作表sheet,但完全没有用到这个变量
修正方案
修改 onOpen 函数的传参逻辑,同时增加容错判断,避免目标工作表被重命名/删除时触发报错,修正后完整代码如下:
function autoSort(sheet) { var SORT_COLUMN_INDEX = 15; var ASCENDING = true; var NUMBER_OF_HEADER_ROWS = 1; var range = sheet.getDataRange(); if (NUMBER_OF_HEADER_ROWS > 0) { range = range.offset(NUMBER_OF_HEADER_ROWS, 0); } range.sort( { column: SORT_COLUMN_INDEX, ascending: ASCENDING } ); } function onOpen(event) { var sheet = SpreadsheetApp.getSheetByName("Form Responses 1"); // 非空判断,避免工作表不存在时报错 if (sheet) { // 传入获取到的工作表对象,而非整个电子表格文件对象 autoSort(sheet); } }
内容的提问来源于stack exchange,提问作者To Do
相关产品推荐
相关产品推荐

