javascript - 尝试将数据从 Google 电子表格发布到外部 API

标签 javascript arrays google-apps-script google-sheets google-sheets-api

我正在使用 Google SpreadSheet 和 IFTTT 为我的手机创建数据库调用日志,效果非常好。 现在,我正尝试通过此数据库调用日志中的 API 在网页中填充表单。 每次 IFTTT 填充工作表时,我都想将 lastRow 发送到我的 API。 工作表中的第一行填充了标题名称:departament、first_name、last_name、email、phone、deadline。

所以我设法像这样将数据发送到 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);
}

现在我需要让它自动化,但我不知道怎么做:

  1. (这是一个电子表格问题)IFTTT 以这种格式“2017 年 4 月 10 日下午 1:54”填充“截止日期”列,但是 API 所需的格式是“2017-04-10T13:54”,如何自动修改?

  2. 从工作表单元格(从 lastRow)获取值并将它们发送给 json 负载

  3. 设置触发事件,以便脚本在每次 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);
}

希望对您有所帮助!

关于javascript - 尝试将数据从 Google 电子表格发布到外部 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43322325/

相关文章:

javascript - 我无法获取从单元格 b2 输入的值

javascript - 如何获取 JSON 数据并将其解析为 Google 表格脚本?

google-apps-script - 如何使用 Google Apps 脚本将视频上传到 Youtube?

javascript - 使用点符号创建 Javascript 对象

javascript - 联系表单中的错误消息

javascript - 如何在 Google 应用程序脚本中引用数组中的元素

javascript - 如何通过数组更新 Angular 子范围

javascript - 如何完成类似 Google Keep 布局的操作

javascript - 与javascript同等排名

c# - 使用 C# .net 检查字符串是否包含数组值之一