【问题标题】:Write data to google spreadsheet from appscript从应用程序脚本将数据写入谷歌电子表格
【发布时间】:2019-08-29 19:37:31
【问题描述】:

这是我的 APP 脚本代码,我试图通过该代码将一行附加到工作表中。它写入数据但总是返回 err 触发 .fail() 函数是 JavaScript:

   function doGet(e) {
    try {
        var ss = SpreadsheetApp.getActiveSpreadsheet();;
        var sheet = ss.getSheets()[0];
        var name = e.parameter.name;
        var address = e.parameter.address;
        var phone = e.parameter.phone;
        var email = e.parameter.email;
        var city = e.parameter.city;
        var quantity = e.parameter.quantity;
        var productTitleFinal = e.parameter.productTitleFinal;
        var productPriceFinal = e.parameter.productPriceFinal;
        var fullDate = e.parameter.fullDate;
        var comment = e.parameter.comment;
        var url = e.parameter.url;
        var rowData = sheet.appendRow([fullDate, name, email, phone, address, city, productPriceFinal, comment, productTitleFinal, quantity, url]);
        var result = "Insertion successful";
        return result
    }
    catch (err) {
        return err
    }
}

这是发送写入数据请求的 JavaScript 代码

var script_url = "https://script.google.com/macros/s/AKfycbx5_btANVIwai5PJ1CT_VHocfcbIhy-_vViGSg6vzDfE_4hOFg4/exec";

  var url = script_url+"?fullDate="+fullDate+"&name="+name+"&email="+email+"&phone="+phone+"&city="+city+"&address="+address+"&comment="+comment+"&quantity="+quantity+"&productTitleFinal="+productTitleFinal+"&productPriceFinal="+productPriceFinal+"&comment="+comment+"&url="+url;

    var request = jQuery.ajax({
      crossDomain: true,
      url: url ,
      method: "GET",
      dataType: "jsonp",
    })
    .done(function(res){
        console.log(res)
    })
    .fail(function(e){
        console.log(e)
    })
    .always(function(e){
        console.log(e)

  });

这段代码可能有什么问题?

【问题讨论】:

  • 我的回答是否向您展示了您想要的结果?你能告诉我吗?这对我学习也很有用。如果这可行,与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果您对我的回答有疑问,我深表歉意。到时候,我能问一下你现在的情况吗?我想学习解决你的问题。
  • 感谢您的回复。很高兴您的问题得到解决。

标签: google-apps-script google-sheets web-applications try-catch httprequest


【解决方案1】:

我认为你的问题的原因是doGet()总是不返回状态200。为了避免这个问题,下面的修改如何?

修改后的脚本:

请按如下方式修改您的脚本。

对于 Google Apps 脚本:

从:
return result
至:
return ContentService.createTextOutput(result);  // Modified

对于 Javascript:

从:
var request = jQuery.ajax({
  crossDomain: true,
  url: url ,
  method: "GET",
  dataType: "jsonp",
})
至:
var request = jQuery.ajax({
  crossDomain: true,  // Also this might not be required.
  url: url ,
  method: "GET",
  // dataType: "jsonp",  // Modified
})

注意:

  • 当您修改 Google Apps 脚本时,请将 Web Apps 重新部署为新版本。这样,最新的脚本就会反映到 Web 应用程序中。请注意这一点。
  • 顺便说一句,在return err的情况下,不会返回错误消息。所以如果你想返回错误信息,请修改为ContentService.createTextOutput(err)。但在这种情况下,返回状态码 200。因此,如果您想将错误信息作为错误检索,则需要在done(function(res){}) 的函数中准备脚本。因为在 Google Apps Script 的 Web Apps 中,无法使用自定义状态码。

参考:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2019-11-16
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多