代码之家  ›  专栏  ›  技术社区  ›  Dwza

每次拒绝在我自己的google脚本中授予权限

  •  0
  • Dwza  · 技术社区  · 6 年前

    情况:

    我给自己做了一张便条,以便进入我的工作时间。在某些情况下,我必须输入一些链接并用部分链接名命名它们。所以我决定创建一个自定义菜单,在这里我只需在一个提示中发布链接,脚本就会删除所需的名称并将其输入到我的工作表中。

    现在这只在我的床单上。我想没有必要发表这样的文章:)

    对于我的问题:

    我有一个主要的工作表,每周都会复制,因为一张表只能解决一周的问题。我的脚本允许我授予它权限,这样它就可以在当前的表上执行上面描述的操作。但每次我复制工作表(所以每周)我都必须再次授予权限。看着我的google帐户看到被授予的权限让我头疼,因为有大量的条目用于授予权限:(

    问题:

    是否有方法保持developerMode的类型以防止此权限请求?

    为什么我要对我自己的脚本授予权限?

    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);
    }
    1 回复  |  直到 6 年前
        1
  •  3
  •   Wicket    6 年前

    我理解“工作表”的意思是电子表格,也就是工作簿、文档和文件,因为在同一个电子表格的多个工作表上使用一个脚本并不需要为每个工作表授权脚本,因为您看到的是“大量用于授予权限的条目”

    另外,我知道您的脚本是在绑定到电子表格的脚本项目上。

    当我们制作一个电子表格的副本时,它将包含一个到它所绑定的脚本项目的副本。新的电子表格及其绑定项目是不同的文件,google的策略是脚本项目提供运行脚本的授权。

    避免拥有同一代码的大量副本并且必须授权其中每个副本的方法是使用一个附加组件,这就是我投票将此问题作为 Use script in all spreadsheets

    不管怎样,答案是

    是否有方法保持developerMode的类型以防止此权限请求?

    开发附加组件 .

    并且

    为什么我要对我自己的脚本授予权限?

    因为没有要求您向一个脚本授予权限,所以要求您向每个副本授予权限。

    值得注意的是,除了必须向每个副本授予权限这一令人头疼的问题之外,如果您对“您的脚本”进行了更改,则该更改将仅在您编写它的脚本项目上进行,而不会“传播”到副本。

    另一种方法是使用库,但您仍必须向使用库的每个脚本项目授予权限。

    关于要在google chrome网上商店上发布的开发人员费用,您可以在测试模式下运行附加组件,但是您必须将每个文件添加到相应的列表中,这对于处理大的文件列表不是很友好。