You do not have permission to use copyTo

时间:2016-04-25 09:44:06

标签: javascript google-apps-script google-sheets

I'm trying to copy a range from one sheet to another (whilst preserving the formulas). I wrote a simple script using copyTo:

function copyRangeAcrossSheets(source_sheet,source_range,target_sheet,target_range) {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var source_sheet = spreadsheet.getSheetByName(source_sheet);
  var target_sheet = spreadsheet.getSheetByName(target_sheet);
  var source_range = source_sheet.getRange(source_range);
  var target_range = target_sheet.getRange(target_range);
  source_range.copyTo(target_range);
}

Which I call as followed:

=copyRangeAcrossSheets("TEST_source","A1:A3","TEST_target","A1:A3")

And I'm getting the below error:

You do not have the permission to call copyTo

I did some digging around and found that functions have to use special triggers (installable) in order to modify another file. However here I'm modifying the same file.

Q1: Why is copyTo failing here?

Q2: How can I workaround the issue without having to define installable triggers? (I just want to copy ranges whilst preserving formulas)

2 个答案:

答案 0 :(得分:1)

为什么会失败?

您无法通过自定义功能修改其他任何需要授权的文档。原因是您的函数是以匿名用户身份执行的,无法获得编辑其他工作表或文档的必要授权。

参考:https://developers.google.com/apps-script/guides/sheets/functions#using_apps_script_services

具体到你就是这个片段:

  

电子表格:只读(可以使用大多数get *()方法,但不能设置*())。   无法打开其他电子表格(SpreadsheetApp.openById()或SpreadsheetApp.openByUrl())。

此外:

  

如果您的自定义函数抛出错误消息"您无权调用X服务。" ,该服务需要用户授权,因此无法在自定义中使用功能

你如何解决这个问题?

编写通过触发器或手动执行的应用脚本功能,您可以使用onEditonChange触发器或基于时间的触发器。您甚至可以在需要时在Apps Script IDE中手动运行该功能。这是Apps脚本的预期行为。

答案 1 :(得分:0)

不确定您的数据是否在源电子表格中保持不变,但您始终可以使用内置的IMPORTRANGE()功能。语法是:

=IMPORTRANGE("SPREADSHEET_ID","SOURCE_SHEET!RANGE_START:RANGE_END")

SPREADSHEET_ID是您正在处理的文件的ID。