0

我在Google表格腳本編輯器中編寫了自定義函數[= ROUTEPLAN(origin,destination,mode,departuretime)]。該函數爲請求分配一個唯一的ID,調用Google Maps Directions API,以參數的形式傳遞函數中列出的參數,解析JSON並提取旅程中每個步驟的持續時間,結束緯度和結束經度,然後追加一排每個步驟中,整個旅程的請求ID,順序步數,持續時間,末緯度和經度結束:如何從自定義函數向Google表格中添加行數(或更一般地寫入數據)

function ROUTEPLAN() { 

    //Call the google route planner api 
    //(variables for api declared here but removed for brevity) 
    var routeResponse = UrlFetchApp.fetch("https://maps.googleapis.com/maps/api/directions/json?origin=" + origin 
             + "&destination=" + destination 
             + "&mode=" + mode + 
             "&region=uk&departure-time=" + departuretime 
             + "&key=MYAPIKEY") 

    //Assign a unique ID to this request 
    var requestID = Date.now() + Math.random(); 

    //Parse JSON from routeResponse 
    var json = routeResponse.getContentText(); 
    var data = JSON.parse(json); 

    //Insert the RequestID, step number, duration, end Latitude and end Longitude for each step of the journey into the RouteDetails sheet 
    var steps = data["routes"][0]["legs"][0]["steps"]; 
    for (i = 0; i < steps.length; i++) { 
    var stepID = i + 1; 
    var duration = steps[i]["duration"]["value"]; 
    var endLat = steps[i]["end_location"]["lat"]; 
    var endLng = steps[i]["end_location"]["lng"]; 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("RouteDetails") 
    sheet.appendRow([requestID,stepID,duration,endLat,endLng]);                             
    } 
} 

,或者至少,這就是我想要做的事。它工作得很好,直到我修好它,現在當我調用電子表格中的函數時出現錯誤,告訴我我沒有權限調用appendRow。我知道爲什麼會發生這種情況(雖然我不明白爲什麼以前不會發生這種情況),但我無法弄清楚我應該怎麼做。

如果appendRow存在,則必須在某種情況下使用它來將數據寫入表單,但我無法弄清楚授予寫入表單的權限的情況。

工作表的目的是向聊天機器人提供數據(聊天機器人應用程序已經讀取&寫入表單的權限)。我不打算提供超出這個範圍的訪問權限(即我不打算髮布這個更廣泛的使用)。我已經試過了可安裝的觸發路線,但是儘管遵循了所有對結果完全沒有影響的說明。從我從閱讀API可執行文件中獲得的有限理解,似乎也不是一種選擇。

誰能告訴我如何解決這個問題?謝謝:-)

+0

appendRow()是一個'Sheet'方法,它不需要修改工作表本身,而是修改工作表中的數據。發佈一些相關的代碼,你更有可能得到答案。 – Brian

回答

2

自定義函數不能修改電子表格的結構,因此調用appendRow()不允許作爲documentation說:

自定義功能可以在不影響比它返回其他細胞一個值。換句話說,自定義函數不能編輯任意單元格,只能編輯它所調用的單元格及其相鄰單元格。要編輯任意單元格,請使用自定義菜單來運行功能

如果要從函數返回多行,則需要返回一個二維數組。但是請注意,自定義函數與原生函數不能覆蓋內容的限制相同,即如果您嘗試返回兩行但下面一行已經填充,函數將會出錯。