如何从自定义函数将Row(或更一般地写入数据)附加到Google Sheets



我在Google Sheets脚本编辑器中编写了一个自定义函数[=ROUTEPLAN(origin,destination,mode,departuretime)]。该函数为请求分配一个唯一的ID,调用Google Maps Directions API,将函数中列出的参数作为参数传递,解析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可执行文件中获得的有限理解来看,这似乎也不是一个选项。

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

自定义函数不能修改电子表格的结构,因此不允许调用appendRow(),如文档中所述:

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

如果您想从函数返回多行,它需要返回一个二维数组。但是,请注意,自定义函数与本机函数具有相同的限制,即不能覆盖内容,即如果您试图返回两行,但下面的行已被填充,则函数将出错。

相关内容

最新更新