根据 POST 参数 App Script 更新 Cell

Update Cell based on POST parameter App Script

我正在向 URL

发出 POST 请求
https://script.google.com/macros/s/{id}/exec?row=5

请求为application/json,请求正文为{"json": true}

这是由发布为网络应用程序(任何人,匿名)的应用程序脚本接收的

function doPost(e){

   var ss=SpreadsheetApp.openById("16XSfRDLY1RdrUxHujbRCPX6eSh4CqP7ES2kVVDCGgoI");
   var sheet = ss.getSheetByName("INGRESOSDEDINERO");
 
var params=JSON.stringify(e.postData.contents);
   params=JSON.parse(params);

   var myObj=JSON.parse(e.postData.contents);

   var row=myObj.row;


  var ss = SpreadsheetApp.getActivesheet();

  ss.getRange(row,4).setValue("CONTACTED");
 
  
  console.log("Post function called");
if (typeof e !== 'undefined')
console.log(e.parameter);
sheet.getRange(row,4).setValue(JSON.stringify(e));

}

我正在尝试传递一个我想修改的行号作为参数。我想用固定值“CONTACTED”更新与行号、第 5 列对应的单元格。它不工作,尽管使用 console.log

,但在 Stackdriver 日志记录下我看不到日志

我相信你的目标如下。

  • 您想使用 https://script.google.com/macros/s/{id}/exec?row=5.
  • 等查询参数来提供 row 的值
  • 根据您的脚本,
    • 您想把JSON.stringify(e)的值放到getRange(row,4)的sheet INGRESOSDEDINERO of Spreadsheet 16XSfRDLY1RdrUxHu...的范围内.
    • 您想将 CONTACTED 的值放入活动 Spreadsheet.
    • 的第一个选项卡中 getRange(row,4) 的范围内

为了通过修改你的脚本达到你的目的,我提出如下修改。

修改点:

  • 我认为您正在尝试通过请求正文检索作为查询参数请求的值。我认为这就是您遇到问题的原因。
  • rowhttps://script.google.com/macros/s/{id}/exec?row=5 等查询参数给出时,您可以使用 e.parameter.rowdoPost(e)e 检索 row .
  • 例如,当您使用脚本请求 Web 应用程序时,当返回一个值 return ContentService.createTextOutput("ok") 时,不会发生错误。
  • 如果要使用getActiveSheet(),请将getActivesheet修改为getActiveSheet()

模式 1:

在此模式中,row 像您的端点一样用作查询参数。

修改后的脚本:

function doPost(e){
  var ss = SpreadsheetApp.openById("16XSfRDLY1RdrUxHujbRCPX6eSh4CqP7ES2kVVDCGgoI");
  var sheet = ss.getSheetByName("INGRESOSDEDINERO");
  var row = e.parameter.row;  // <--- Modified
  var ss = SpreadsheetApp.getActiveSheet();  // <--- Modified
  ss.getRange(row,4).setValue("CONTACTED");
  console.log("Post function called");
  if (typeof e !== 'undefined')
  console.log(e.parameter);
  sheet.getRange(row,4).setValue(JSON.stringify(e));
  return ContentService.createTextOutput("ok");  // <--- Added
}

测试

当您使用 curl 命令测试以上 Web 应用程序时,您可以使用以下 curl 命令。

curl -L -d "key=value" "https://script.google.com/macros/s/###/exec?row=5"
  • -d "key=value"用于请求POST方法以doPost为虚拟。

模式二:

在此模式中,row 像您的脚本一样用作请求正文。

修改脚本 2:

function doPost(e){
  var ss = SpreadsheetApp.openById("16XSfRDLY1RdrUxHujbRCPX6eSh4CqP7ES2kVVDCGgoI");
  var sheet = ss.getSheetByName("INGRESOSDEDINERO");
  var myObj=JSON.parse(e.postData.contents);
  var row=myObj.row;
  var ss = SpreadsheetApp.getActiveSheet();  // <--- Modified
  ss.getRange(row,4).setValue("CONTACTED");
  console.log("Post function called");
  if (typeof e !== 'undefined')
  console.log(e.parameter);
  sheet.getRange(row,4).setValue(JSON.stringify(e));
  return ContentService.createTextOutput("ok");  // <--- Added
}

测试

当您使用 curl 命令测试以上 Web 应用程序时,您可以使用以下 curl 命令。

curl -L -d "{\"row\": 5}" "https://script.google.com/macros/s/###/exec"

注:

  • 当您修改Web Apps的脚本时,请重新部署Web Apps为新版本。由此,最新的脚本被反​​映到Web Apps。请注意这一点。

参考文献: