1

我正在使用Google SpreadSheet和IFTTT來完成手機的數據庫呼叫日誌,這個工作非常完美。 現在我試圖從這個數據庫調用日誌中通過API填充網頁中的表單。 每次IFTTT填充表單時,我都希望將lastRow發送到我的API。 工作表中的第一行填充了標題名稱:departament,first_name,last_name,email,phone,deadline。試圖將數據從Google Spreadsheet發佈到外部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); 
} 

現在我需要自動執行它,但我不知道如何:

  1. (這是一個電子表格的問題) IFTTT以「2017年4月10日下午01:54」這種格式填充「截止日期」列,但API所需的格式是「2017-04-10T13:54」,如何自動修改它?

  2. (從LASTROW)得到表單元格的值,並把他們扔JSON有效載荷

  3. 設定一個觸發事件,使該腳本觸發的每次IFTTT填充片中的新行。

謝謝!

回答

1

將嘗試一個回答的問題之一:

1)格式化日期:您可以使用Utilities.formatDate() Google Apps腳本修改日期。

代碼:

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] 

} 

編輯

要獲得值是IE在工作表中顯示的值,你可以像下面這樣將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); 
} 

希望幫助!

+0

Tx爲全部。它的工作幾乎完美。 –

+0

部門編號是1.0我需要1(無小數)。電話號碼不正確我需要一個10位數號碼,我目前的號碼是727656656,我需要0727656656。 [code] function createSpreadsheetEditTrigger(){ var ss = SpreadsheetApp.getActive(); ScriptApp.newTrigger('PipeLine') .forSpreadsheet(ss) .onEdit() .create(); [code]這是Trigger的代碼片段,但不能按預期的方式工作(當我在表格中修改單元格時觸發它,但當IFTTT自動插入新的Row時它不起作用 –

+0

我編輯了上面的回答顯示顯示值是這樣的! –

相關問題