我正在使用谷歌电子表格和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)重新格式化日期:您可以在应用程序脚本中使用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