Google Script - DriveApp.getFilesByName - 错误(无权限)

时间:2015-04-25 04:19:51

标签: google-apps-script google-sheets

我试图通过Google Spreadsheets调用自定义函数pdfFile。

function pdfFile(number, revision) {
  // Log the name of every file in the user's Drive.
  Logger.log(number + '_R' + revision + '.pdf');

  var files = DriveApp.getFilesByName(number + '_R' + revision + '.pdf');
  while (files.hasNext()) {
    var file = files.next();
    //var name = file.getName();
    var id = file.getId();
    Logger.log(file.getName() + '|' + file.getId());

    //Return link to PDF file
    return '=HYPERLINK("https://docs.google.com/file/d/'+id+'/edit?usp=drivesdk";"PDF")';
  }
}

当我手动在脚本编辑器中测试它时,它会起作用。

function test_pdfFile() {
  var range = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getRange("D2:E2");

  // Returns cell
  var number = range.getCell(1, 1).getValue();
  var revision = range.getCell(1, 2).getValue();

  result = pdfFile(number, revision);
  Logger.log(result);
}

但是,当我在电子表格中使用自定义公式时,错误"您没有权限调用函数DriveApp.getFilesByName(第5行)"谈到。我已在Resources->其他Google功能和开发者控制台中启用了Drive API。请找到附件图片(对不起,俄文文本)。请帮忙。

2 个答案:

答案 0 :(得分:3)

如果您的自定义函数抛出错误消息Provider.select("avg(reviews.rating) as avg_rating").joins(:reviews).order("avg_rating desc") ,则该服务需要用户授权,因此无法在自定义函数中使用。

查看此documentation了解详情。

希望有所帮助!

答案 1 :(得分:3)

我的解决方案是:
1.在onOpen()中创建一个菜单: SpreadsheetApp.getUi().createMenu('MenuName').addItem('FooName', 'fooFunction').addToUi(); 代码生成一个'FooName'菜单,使其对应于fooFunction() 2.在fooFunction()或更高版本中,调用getFilesByName()。

以下是我的假设:允许或仅在生成新菜单或侧边栏时允许使用getFilesByName()。它与AuthMode无关。在授权模式None或Limited下,脚本运行正常。

“你不能在自定义函数中调用getFilesByName()”并不意味着你不能,当你创建一个菜单并从菜单中调用它时,它就有可能。

以下是我以前尝试过的其他方法:
1.使用onInstall(),这被证明对这个问题毫无用处 2.在onInstall()或onOpen()中调用getFilesByName(),这不是必需的。

其他一些有用的链接:
当您将脚本作为加载项进行测试时,请检查已安装和已启用的区别:
https://developers.google.com/apps-script/add-ons/lifecycle#installed_versus_enabled

onInstall()的AuthMode:
https://developers.google.com/apps-script/guides/menus