修复通过侧边栏更新Google Sheet Phonelist表数据的Apps Script代码
Google Sheet侧边栏同步修改数据代码修正
原代码存在的问题
- 侧边栏调用方法错误:
SpreadsheetApp.getUi().sidebar(html)应为showSidebar()方法 - 拼写错误:
ws.getRange(dat[i])中变量名错误,不存在dat变量,同时缺少范围参数定义 - 列索引错误:工作表列顺序为
NAME/PLACE/PHONE,data[i][1]取的是PLACE列的值,匹配姓名应使用data[i][0](数组索引从0开始,对应第1列NAME) - 匹配条件硬编码:固定匹配
"John",改为读取表单传入的name变量才能匹配目标修改用户,若仅测试修改John可保留固定值 - 范围与赋值方法错误:
setValue()仅支持单个单元格赋值,同时修改一行3列数据需要用setValues(),且传入参数为二维数组,getRange()需要指定「行号/起始列/行数/列数」四个参数 - 数组与工作表行号错位:
data数组索引从0开始,工作表行号从1开始,数组第i项对应工作表第i+1行
修正后完整代码
function sidebar() { var html = HtmlService.createHtmlOutputFromFile("Form").setTitle('Phone Details'); SpreadsheetApp.getUi().showSidebar(html); } function result(form) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var ws = ss.getSheetByName("Phonelist"); var data = ws.getDataRange().getValues(); var name = form.name; var place = form.place; var phone = form.phone; for (var i = 1; i < data.length; i++) { // 仅测试固定修改John时,可将条件改为 data[i][0] == "John" if(data[i][0] == name){ const updateValues = [[name, place, phone]]; // 参数说明:行号、起始列、修改行数、修改列数 ws.getRange(i + 1, 1, 1, 3).setValues(updateValues); break; // 匹配到唯一目标后跳出循环,存在重名需求可删除该行 } } }
注意事项
- 请确保
Form.html表单提交时传递的字段名与代码中form.name/form.place/form.phone完全一致,无拼写错误 - 若存在重名人员,建议添加唯一ID字段作为匹配条件,避免误改
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

