当前位置: 首页 > 知识库问答 >
问题:

试图将数据从Google电子表格发布到外部Api

夏理
2023-03-14

我正在使用谷歌电子表格和IFTTT做我手机的DB通话记录,这是完美的工作。现在,我正试图通过这个DB调用日志中的API在web页面中填充一个表单。每次IFTTT填充工作表时,我都希望将lastRow发送到我的API。工作表中的第一行填充有标题名称:部门、名、姓、电子邮件、电话、截止日期。

因此,我设法将数据发送到API,如下所示:

function myFunction() {

var data = {

    'department':     1,
    'first_name' :    'Test',
    'last_name' :     'test',
    'email' :         'email@gmail.com',
    'phone' :         ["0700000000"],
    'deadline' :      '2017-04-10T00:00'
}

var payload = JSON.stringify(data)  

var headers = {

     'AUTHORIZATION': 'Token b8473654v6345teryrby456yrtyrtyertytdvfh87afc',
     // Add any other required parameters for XXX API.
};
var url = 'http://api.XXX.com/api/1.0/clients/';
var options = {
    'method': 'post',
    'contentType': 'application/json', 
    'headers': headers,
    'payload' : payload,
};
var response = UrlFetchApp.fetch(url, options);
}

现在我需要自动化它,但我不知道如何:

>

从表单元格(从lastRow)获取值并将其发送给json负载

设置触发器事件,以便每次IFTTT填充工作表中的新行时脚本触发器都会触发。

非常感谢。

共有1个答案

蒋正平
2023-03-14

将尝试逐一回答问题:

1)重新格式化日期:您可以在应用程序脚本中使用Utilities.format日期()来修改您的日期。

代码:

function reformatDate(dtStr)
{
 if (dtStr == undefined)
 dtStr = "April 1, 2017 at 01:54PM"

 dtStr = dtStr.replace("at", "") // Remove at
 dtStr = dtStr.replace(/(\d)(PM)/g,"$1 $2") //Add a space between the time and PM
 dtStr = dtStr.replace(/(\d)(AM)/g,"$1 $2") //Add a space between the time and AM
 Logger.log(dtStr)

 dtStr = new Date(dtStr)
 var newDt = Utilities.formatDate(dtStr, SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "yyyy-MM-dd'T'HH:mm") 
 Logger.log(newDt)

 return newDt
}

2)获取最后一行值:您可以在应用程序脚本中使用getLastRow()getValue()函数

function lastRowData(){
 var ss = SpreadsheetApp.getActive()
 var sheet = ss.getActiveSheet()
 var lastRow = sheet.getLastRow() 
 var lastCol = sheet.getLastColumn()
 var lastRowData = sheet.getRange(lastRow,1,1,lastCol).getValues()
 return lastRowData[0]

}

编辑

要按原样获取值,即工作表中显示的值,可以将getvalues修改为getDisplayValues(),如下所示:

var lastRowData = sheet.getRange(lastRow,1,1,lastCol).getDisplayValues()

3) 触发你的表:我不会在这里重新发明轮子。但是@Mogsdad Link会给你一个很棒的答案:当一个手机从另一个应用程序(IFTTT)写入时触发一封电子邮件

简而言之,您必须使用OneEdit触发器来检测新条目
如果on edit不起作用,请尝试更改触发器。

完整代码:

function myFunction() {
var lastRow = lastRowData()
var data = {

    'department':     lastRow[0],
    'first_name' :    lastRow[1],
    'last_name' :     lastRow[2],
    'email' :         lastRow[3]',
    'phone' :         [lastRow[4]],
    'deadline' :      reformatDate(lastRow[5])
}

var payload = JSON.stringify(data)  

var headers = {

     'AUTHORIZATION': 'Token b8473654v6345teryrby456yrtyrtyertytdvfh87afc',
     // Add any other required parameters for XXX API.
};
var url = 'http://api.XXX.com/api/1.0/clients/';
var options = {
    'method': 'post',
    'contentType': 'application/json', 
    'headers': headers,
    'payload' : payload,
};
var response = UrlFetchApp.fetch(url, options);
}

希望有帮助!

 类似资料:
  • 问题内容: 我正在尝试将表单数据发布到Google电子表格。当前,如果表单经过验证,则会发生以下情况: 我使用成功设置来验证我的表单数据已正确序列化(正确)并且成功。但是,我的Google电子表格未更新(没有数据通过)。我在此处使用了示例代码,将doGet更改为doPost(http://mashe.hawksey.info/2011/10/google- spreadsheets-as-a-da

  • 我有一个共享的谷歌电子表格。工作表的某些列必须填充数据库服务器(PostgreSQL)中存在的数据(SQL查询)。 此外,必须计划自动完成数据加载(例如,每天1点)。 最后,我需要在电子表格中进行一些调整(例如,加载后,将日期时间放在工作表的名称中或发送确认电子邮件等) 实现这一目标的最佳和最简单的方法是什么?(我开始查看Google应用程序脚本和Google Sheets API,但不确定哪个更

  • 我有每周更新的谷歌电子表格。它包含多个工作表,每个星期都有不同的名称。 有没有一种方法可以使用google脚本将该电子表格中的所有表格复制到另一个电子表格中?我的主要目标是复制整个电子表格,并让我运行脚本的工作表拥有源表中的所有工作表和数据。如果这个复制过程只复制数据,而不是其他工作表中的公式,那也很好。 提前谢谢! 埃里克

  • 问题内容: 案例:我的脚本返回一个数据框,该数据框需要作为新的数据行附加到现有的Google电子表格中。到目前为止,我正在通过gspread将数据框附加为多个单行。 我的代码: 有没有一种方法可以附加整个数据帧而不是多个单行? 问题答案: 我可以推荐:

  • 我正在使用谷歌表单跟踪我网站上最近的订单。我想将每个新订单的详细信息添加到谷歌电子表格中,让最新的订单详细信息显示在工作表的顶部,旧的条目显示在底部。 我知道我可以在最后一行后追加新行,而不知道/使用以下代码向谷歌提供行号: 但是,这意味着新条目将添加到工作表的底部,而不是顶部。我的要求正好相反。我需要在工作表的顶部添加/附加较新的条目,并将较旧的条目移动到底部。 有没有一种方法可以通过API本机

  • 我正在尝试将表单数据发布到google电子表格中。当前,如果表单已验证,则会发生以下情况: 我使用了成功设置来验证我的表单数据是否被正确序列化(它是),以及是否成功。然而,我的谷歌电子表格没有更新(没有数据通过)。我在这里使用了示例代码,将doGet更改为doPost(http://mashe.hawksey.info/2011/10/google-spreadsheets-as-a-databa