我在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 +
"®ion=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 :(得分:2)
自定义功能无法修改电子表格的结构,因此不允许按documentation中所述调用appendRow()
:
自定义函数不会影响除返回值之外的单元格。换句话说,自定义函数不能编辑任意单元格,只能编辑它所调用的单元格及其相邻单元格。要编辑任意单元格,请使用自定义菜单来运行函数
如果要从函数返回多行,则需要返回二维数组。但请注意,自定义函数与无法覆盖内容的本机函数具有相同的限制,即如果您尝试返回两行但下面的行已经填充,则函数将会出错。