Google表单联动表格:isBlank报错,如何定位空单元格并写入随机ID?
搞定Google Apps Script里的"Cannot find function isBlank in object"报错
嘿,作为脚本新手碰到这种报错确实头大,我来帮你拆解问题并搞定它!
首先,这个报错的核心原因很明确:你写的ax.isBlank()里,ax是通过getCell(rws-1,7).getValue()拿到的单元格值(可能是空字符串、null或者具体内容),但isBlank()是Google Apps Script中Range(单元格对象)的方法,不是单元格值的方法,所以会触发这个错误。
接下来一步步给你修正代码:
1. 修复空单元格判断的问题
有两种简单的修正方式,选哪种都行:
方式一:直接检查单元格值是否为空
// 先拿到目标单元格对象 var targetCell = r.getCell(rws-1, 7); // 获取单元格的值 var cellValue = targetCell.getValue(); // 判断值是否为空(空字符串、null都会被判定为true) if (!cellValue) { targetCell.setValue(id); }
方式二:用Range对象的isBlank()方法
如果想直接用isBlank(),得调用单元格对象的方法,而不是它的值:
var targetCell = r.getCell(rws-1, 7); // 这里调用的是单元格对象的isBlank()方法,没问题 if (targetCell.isBlank()){ targetCell.setValue(id); }
2. 修复create_id()函数的隐藏bug
你的create_id()现在有两个容易忽略的问题:
- 当生成的ID重复时,只重新生成一次,运气不好还是会重复,应该改成循环直到找到唯一的ID
- 函数最后没有返回生成的ID!这会导致你拿到的
id是undefined,写入单元格的是空值
修正后的create_id():
function create_id(){ var script_properties = PropertiesService.getScriptProperties(); var keys = script_properties.getKeys(); var id = new_id(); // 循环生成,直到找到未被使用过的ID while(keys.indexOf(id) >= 0){ id = new_id(); } script_properties.setProperty(id, new Date()); return id; // 必须返回生成的ID,不然前面拿不到值! }
3. 整合后的完整代码
把所有修正放在一起,完整的可运行代码如下:
// 给主函数起个清晰的名字,方便绑定触发器 function assignUniqueIdOnFormSubmit() { var id = create_id(); var ss = SpreadsheetApp.getActiveSpreadsheet(); var responseSheetRange = ss.getRange("'Form Responses 1'!A2:H150"); var totalRows = responseSheetRange.getNumRows(); var targetCell = responseSheetRange.getCell(totalRows - 1, 7); if (targetCell.isBlank()){ targetCell.setValue(id); } } function create_id(){ var script_properties = PropertiesService.getScriptProperties(); var keys = script_properties.getKeys(); var id = new_id(); while(keys.indexOf(id) >= 0){ id = new_id(); } script_properties.setProperty(id, new Date()); return id; } function getRndNumber(min, max){ return Math.floor(Math.random() * (max - min + 1) + min); } function new_id(){ var rndNum = getRndNumber(1, 99999); var id = ('0000'+rndNum).slice(-5); return id; }
最后一步:绑定表单提交触发器
因为你希望表单提交时自动执行脚本,记得给assignUniqueIdOnFormSubmit绑定触发器:
- 在脚本编辑器左侧点击时钟图标(触发器)
- 点击「添加触发器」
- 函数选
assignUniqueIdOnFormSubmit,事件源选「电子表格」,事件类型选「表单提交」
这样每次有新的表单提交,脚本就会自动给第7列的空单元格写入唯一ID啦~
内容的提问来源于stack exchange,提问作者Madlynne
相关产品推荐
相关产品推荐

