Google Apps Script用POST方法向页面发送数据失败该如何解决?
问题排查与修复方案
错误原因
UrlFetchApp配置格式错误:POST请求的业务参数必须放到payload字段下,你直接把参数写在options根节点是无效的,GAS不会将其识别为POST表单字段- 请求头配置错误:手动指定
multipart/form-data但没有配置对应的分隔符,会导致服务端无法正常解析表单数据,发送表单数据时不需要手动指定该请求头,GAS会自动生成正确的请求头 - 数据范围选取错误:
ss.getRange(sheetname+"!A1:"+maxRow)写法不符合A1表示法规范,会导致获取数据异常,正确的范围需要包含列和行的结束位置 - 触发器权限问题:如果该函数是绑定
onEdit触发,简单触发器没有外部网络调用权限,无法执行UrlFetchApp请求,需要使用可安装触发器
修复后代码
function editSheet(e){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var activeSheet = ss.getActiveSheet(); var sheetId = ss.getId(); var filename = ss.getName(); var sheetname = activeSheet.getName(); var maxCol = activeSheet.getLastColumn(); var maxRow = activeSheet.getLastRow(); var gid = activeSheet.getSheetId(); // 正确获取整张工作表的所有数据 var values = activeSheet.getRange(1, 1, maxRow, maxCol).getValues(); var json = JSON.stringify(values); var options = { "method" : "POST", // 所有POST参数统一放到payload字段 "payload" : { "sheet" : sheetId, "filename": filename, "values" : json } }; var url = 'http://mydomian.pl/app.php'; var response = UrlFetchApp.fetch(url, options); // 输出完整返回内容 Logger.log(response.getContentText()); }
额外说明
- 触发器创建方式:进入Google Sheets的「扩展程序」-「Apps Script」,点击左侧「触发器」按钮,添加新触发器,选择要运行的函数为
editSheet,事件来源选择「电子表格」,事件类型选择「编辑时」,保存后即可获得外部接口调用权限 - 若需要传输JSON格式数据,可使用如下配置,PHP端通过
file_get_contents('php://input')接收解析即可:
var options = { "method" : "POST", "contentType" : "application/json", "payload" : JSON.stringify({ sheet: sheetId, filename: filename, values: values }) };
内容的提问来源于stack exchange,提问作者test api
相关产品推荐
相关产品推荐

