我正在使用Google SpreadSheet和IFTTT进行手机的数据库通话记录,这是完美的工作。
现在,我正在尝试通过此数据库调用日志中的API在网页中填充表单。
每当IFTTT填充工作表时,我都希望将lastRow发送到我的API。
工作表的第一行填充标题名称:部门,名字,姓氏,电子邮件,电话,截止日期。

所以我设法像这样将数据发送到API:

function myFunction() {

var data = {

    'department':     1,
    'first_name' :    'Test',
    'last_name' :     'test',
    'email' :         '[email protected]',
    '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);
}


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


(这是一个SpreadSheet问题)IFTTT以“ 2017年4月10日下午01:54 PM”格式填充“最后期限”列,但是API所需的格式为“ 2017-04-10T13:54”,如何自动修改?
从Sheet单元格(从lastRow)获取值并将其发送给它们,并抛出json负载
设置触发事件,以便脚本每次在IFTTT填充工作表中的新行时触发。


谢谢!

最佳答案

将尝试一个接一个地回答问题:

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

码:

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()getValues()函数

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的绝佳回答
 链接:Trigger an email when a cell is written into from another app (IFTTT)

简而言之,您将必须使用onEdit触发器来检测新条目。
如果无法进行编辑,请尝试使用更改触发器。

完整的代码:

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);
}


希望有帮助!

09-20 13:32