如何从自定义函数

时间:2017-10-20 10:30:24

标签: google-apps-script google-sheets-api google-maps-direction-api

我在Google表格脚本编辑器中编写了自定义函数[= ROUTEPLAN(原点,目的地,模式,退出时间)]。该函数为请求分配一个唯一ID,调用Google Maps Directions API,将params传递给函数中列出的参数,解析JSON并提取旅程中每个步骤的持续时间,结束纬度和结束经度,然后为每个步骤附加一行,包括整个旅程的请求ID,连续步骤编号,持续时间,结束纬度和结束经度:

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可执行文件的有限理解来看,这似乎也不是一种选择。

谁能告诉我如何解决这个问题?谢谢: - )

1 个答案:

答案 0 :(得分:2)

自定义功能无法修改电子表格的结构,因此不允许按documentation中所述调用appendRow()

  

自定义函数不会影响除返回值之外的单元格。换句话说,自定义函数不能编辑任意单元格,只能编辑它所调用的单元格及其相邻单元格。要编辑任意单元格,请使用自定义菜单来运行函数

如果要从函数返回多行,则需要返回二维数组。但请注意,自定义函数与无法覆盖内容的本机函数具有相同的限制,即如果您尝试返回两行但下面的行已经填充,则函数将会出错。