情况:
我为自己制作了一个电子表格来输入我的工作时间。对于某些情况,我必须输入一些链接并用链接名称的一部分命名它们。因此,我决定创建一个自定义菜单,只需在提示中发布链接,脚本就会剪下所需的名称并将其输入到我的工作表中。
现在这仅在我的工作表中运行。我想没有必要发布这样的东西:)
我的问题:
我有一个主要工作表,每周都会复制它,因为一张工作表只能解决一周的问题。我的脚本使我向它授予权限,以便它可以在当前工作表上执行上面描述的操作。但每次我复制该表(所以每周)我都必须再次授予权限。查看我的 Google 帐户,看到授予的权限让我头疼,因为有大量用于授予权限的条目:(
问题:
有没有办法保持开发者模式来阻止此权限请求?
为什么我必须授予我自己的脚本权限?
function onOpen(e) {
var menu = SpreadsheetApp.getUi().createMenu('Custom Menu');
menu.addItem('Add Ticket', 'addTicket');
menu.addItem('Rename to KW XX', 'renameDocument');
menu.addToUi();
}
function addTicket() {
var ui = SpreadsheetApp.getUi(); // Same variations.
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var myCell = sheet.getActiveCell();
var result = ui.prompt(
'Add Ticket',
'Please enter Ticket-link:',
ui.ButtonSet.OK_CANCEL);
// Process the user's response.
var button = result.getSelectedButton();
var link = result.getResponseText();
if (button == ui.Button.OK) {
var n = link.lastIndexOf('/');
var linkName = link.substring(n+1);
var vals = myCell.setValue('=HYPERLINK("' + link + '";"' + linkName + '")');
} else if (button == ui.Button.CANCEL) {
// User clicked "Cancel".
ui.alert('You cancled adding ticket.');
} else if (button == ui.Button.CLOSE) {
// User clicked X in the title bar.
ui.alert('You closed the dialog. No ticket was inserted.');
}
}
function renameDocument() {
eval(UrlFetchApp.fetch('https://momentjs.com/downloads/moment-with-locales.js').getContentText());
var sheet = SpreadsheetApp.getActive();
var doc = DocumentApp.getActiveDocument();
moment.locale('de');
var kw = moment().format('ww');
var name = sheet.getName();
sheet.setName('KW ' + kw);
}
最佳答案
据我所知,“工作表”是指电子表格,又称工作簿、文档和文件,因为在同一电子表格上的多个工作表上使用脚本不需要为每个工作表授权脚本,并且因为您看到“大量用于授予权限的条目”
此外,我了解到您的脚本位于与电子表格绑定(bind)的脚本项目中。
当我们制作电子表格的副本时,它将包含与其绑定(bind)的脚本项目的副本。新电子表格及其有界项目,因为它们是不同的文件,并且 Google 的政策是运行脚本的授权由脚本项目授予。
避免拥有大量相同代码副本并必须对每个副本进行授权的方法是使用附加组件,这就是我投票关闭此问题作为 Use script in all spreadsheets 重复项的原因。
无论如何,答案
Is there a way to stay in kind of a developermode to prevent this permission requests?
是开发一个附加组件。
到
Why do I have to grand permissions to my own script?
因为系统不会要求您向一个脚本授予权限,所以系统会要求您向每个副本授予权限。
值得注意的是,除了必须向每个副本授予权限的头痛之外,如果您对“您的脚本”进行了更改,它只会在您编写它的脚本项目上,该更改不会被“传播” “到副本。
另一种方法是使用库,但您仍然必须向使用该库的每个脚本项目授予权限。
关于在 Google Chrome Web Store 上发布的开发人员费用,您可以在测试模式下运行您的附加组件,但您必须将每个文件添加到相应的列表中,这对于处理大型文件列表不太友好.
关于javascript - 每次都拒绝在我自己的谷歌脚本中授予权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50811046/