【问题标题】:You do not have permission to use copyTo您无权使用 copyTo
【发布时间】:2016-04-25 09:44:05
【问题描述】:

我正在尝试将范围从一张纸复制到另一张纸(同时保留公式)。我用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);
}

我这样称呼:

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

我收到以下错误:

你没有权限调用copyTo

我做了一些挖掘,发现functions have to use special triggers (installable) in order to modify another file。但是在这里我正在修改同一个文件。

Q1:为什么copyTo 在这里失败了?

Q2:如何在无需定义可安装触发器的情况下解决该问题?(我只想复制范围同时保留公式)

【问题讨论】:

    标签: javascript google-apps-script google-sheets google-sheets-formula google-sheets-custom-function


    【解决方案1】:

    为什么会失败?

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

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

    具体给你的是这个 sn-p:

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

    还有:

    如果您的自定义函数抛出错误消息“您没有权限调用X服务。”,该服务需要用户授权,因此不能在自定义函数中使用。

    如何解决这个问题?

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

    【讨论】:

    • You cannot modify other documents:我正在修改同一个文档,这就是我没有得到的。如果我修改了不同的电子表格,我会理解,但这里不是这样。
    • @Max 据它所知,它是一个需要授权的工作表,它不能作为匿名用户检索。这些函数只能返回数据,但不能使用任何其他需要授权才能写入数据的服务。我已经编辑了我的休息以反映这一点。
    • @Max 菜单是一种非常用户友好的方式。如果有机会,请查看自定义侧边栏和对话框,它们也非常整洁。
    【解决方案2】:

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

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

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

    【讨论】:

    • 知道IMPORTRANGE,但它不保留公式(这是我的要求,请参阅第一行问题)
    猜你喜欢
    • 2015-08-15
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多