Google Sheets使用Apps Script提交表单到外部表格报lastRow Null错误
错误原因
- 核心错误1:你通过
shUserForm.getDataRange().getValues()拿到的srcData是二维值数组,并非Range或Sheet对象,数组没有getRange()方法,调用该方法会直接抛出异常 - 核心错误2:调用外部表
getSheetByName("Mastersheet")时如果找不到对应名称的工作表(比如大小写拼写错误、工作表被删除/重命名),会返回null值,此时调用getLastRow()就会触发你遇到的Null错误 - 小问题:日期格式字符串末尾多了无效冒号,会导致格式显示异常
修正后代码
function submitData() { // 引用当前表的表单工作表 var myGoogleSheet = SpreadsheetApp.getActiveSpreadsheet(); var shUserForm = myGoogleSheet.getSheetByName('MasterSheet'); if (!shUserForm) { SpreadsheetApp.getUi().alert("当前文档找不到名为MasterSheet的工作表"); return; } // 打开外部存储表 var extSS = SpreadsheetApp.openById("1U9SmfPCH9v8maqh6XL0dmRL85TJZfckUV7SAEGM3pQo"); var datasheet = extSS.getSheetByName("Mastersheet"); // 校验外部工作表是否存在,避免Null错误 if (!datasheet) { SpreadsheetApp.getUi().alert("外部文档找不到名为Mastersheet的工作表,请检查表名拼写"); return; } var ui = SpreadsheetApp.getUi(); var response = ui.alert("提交", "是否确认提交数据?", ui.ButtonSet.YES_NO); if (response == ui.NO) { return; } if (validateEntry() == true) { var blankRow = datasheet.getLastRow() + 1; // 直接从表单工作表取对应单元格值,不要用数组调用getRange datasheet.getRange(blankRow, 1).setValue(shUserForm.getRange("C7").getValue()); // 录入编号 datasheet.getRange(blankRow, 2).setValue(shUserForm.getRange("C9").getValue()); // 部门 datasheet.getRange(blankRow, 3).setValue(shUserForm.getRange("C11").getValue()); // 坐席姓名 datasheet.getRange(blankRow, 4).setValue(shUserForm.getRange("C13").getValue()); // 枢纽位置 datasheet.getRange(blankRow, 9).setValue(shUserForm.getRange("C15").getValue()); // 订单ID datasheet.getRange(blankRow, 10).setValue(shUserForm.getRange("C20").getValue()); // 录入类型 datasheet.getRange(blankRow, 5).setValue(Session.getActiveUser().getEmail()); // 提交人邮箱自动获取 datasheet.getRange(blankRow, 7).setValue(new Date()).setNumberFormat('yyyy-mm-dd h:mm'); datasheet.getRange(blankRow, 8).setValue(new Date()).setNumberFormat('yyyy-mm-dd h:mm'); datasheet.getRange(blankRow, 6).setValue(shUserForm.getRange("C17").getValue()); // 备注 ui.alert('新数据已保存 - 录入编号 #' + shUserForm.getRange("C7").getValue()); // 清空表单 shUserForm.getRange("C7").clear(); shUserForm.getRange("C9").clear(); shUserForm.getRange("C11").clear(); shUserForm.getRange("C13").clear(); shUserForm.getRange("C15").clear(); shUserForm.getRange("C17").clear(); } }
额外注意事项
如果运行时依然提示权限相关错误,需要先给脚本授权访问外部表格的权限。
内容的提问来源于stack exchange,提问作者Jove
相关产品推荐
相关产品推荐

