我试图通过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。请找到附件图片(对不起,俄文文本)。请帮忙。
答案 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