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说:

自定义功能可以在不影响比它返回其他细胞一个值。换句话说,自定义函数不能编辑任意单元格,只能编辑它所调用的单元格及其相邻单元格。要编辑任意单元格,请使用自定义菜单来运行功能

如果要从函数返回多行,则需要返回一个二维数组。但是请注意,自定义函数与原生函数不能覆盖内容的限制相同,即如果您尝试返回两行但下面一行已经填充,函数将会出错。