【问题标题】:Hide Apps Script code from editor of a Google Sheet从 Google 表格的编辑器中隐藏 Apps 脚本代码
【发布时间】:2022-01-23 15:07:54
【问题描述】:

我希望我不再问一个已经回答的问题,如果我这样做了,请多多包涵。

我基本上一直在构建一个供许多用户使用的 Google 表格。我创建了许多脚本文件,一切都按预期工作,但是工作表的编辑者将能够从工作表上的脚本编辑器菜单选项中看到源代码。

脚本中有很多敏感信息应该对编辑用户隐藏,我该如何限制他们编辑脚本并且不查看敏感信息?

我发现 this answer 建议将 Apps 脚本项目作为插件发布。不幸的是,我很难理解如何去做(我的清单尚未更新),还有一些使用不同方法的答案。

注意:如果有一个简单的示例说明如何进行发布,那么请分享,因为我正在为 Google 的文档而苦苦挣扎。

我的 appsscript.json 文件:

{
  "timeZone": "Africa/Maputo",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

注意2:脚本的入口点是通过可安装的触发器编辑电子表格

注意 3:当切换到传统模式并 Publish->Deploy from Manifest(如 Google 文档中的示例所示)时,我看不到安装插件的选项 - 没有指示入口点。 p>

鉴于我的项目中有多个 .gs 文件,并且希望电子表格的编辑者甚至无法查看源代码的访问权限,那么实现此安全功能的最佳方法是什么。

非常感谢任何反馈,谢谢。

【问题讨论】:

    标签: google-apps-script google-sheets deployment manifest


    【解决方案1】:

    除非您将代码作为插件发布,否则您无法保护代码或任何凭据。

    【讨论】:

    • 好的,谢谢。除了 Google 文档之外,是否还有其他文档,关于如何进行此操作的教程?举个例子会很有帮助。
    • 您可以从 Google 文档中获取所需的所有信息。如果您正在寻找代码示例,请查看developers.google.com/workspace/add-ons/samples
    • 文档有很多内容,例如,我现在正试图弄清楚如何配置 OAuth 同意屏幕。我想私下发布它,因为它只会在我们的组织内使用。
    【解决方案2】:

    您遇到的行为似乎是由于脚本绑定到相关工作表所致。

    绑定脚本只不过是直接从电子表格本身而不是单独创建的脚本。

    在这种情况下你可以做什么

    1. 创建一个未绑定到任何电子表格的新 Apps 脚本项目。在浏览器栏中输入一个简单的script.new 即可。

    2. 将整个代码复制并粘贴到新脚本中。

    3. 替换任何类似于以下内容的说明:

    SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    // Or whichever Apps Script service you are using
    

    收件人:

    SpreadsheetApp.openById("SPREADSHEET_ID").getActiveSheet();
    // Or whichever Apps Script service you are using
    

    由于新脚本不会附加到电子表格中,因此您必须准确指定要打开和处理的电子表格,因此使用openById 方法。

    1. 重新安装触发器

    您也可以通过编程方式安装触发器!对于您的用例,如果您想使用onEdit,只需创建以下函数。这最终创建了一个onEdit 触发器,并将其附加到您希望它充当触发器的函数。

    function createSpreadsheetEditTrigger() {
      var ss = SpreadsheetApp.openById('SPREADSHEET_ID');
      ScriptApp.newTrigger('TRIGGER_FUNCTION_NAME')
        .forSpreadsheet(ss)
        .onEdit()
        .create();
    }
    
    1. 从附加到电子表格的旧脚本中删除所有代码。

    2. 瞧!

    参考

    【讨论】:

    • 嗨,啤酒,非常感谢。我一直按照您的说明进行操作,直到我必须为触发器选择事件源......这应该是每当编辑电子表格时。我只有“时间驱动”和“从日历”选项可用,没有“从电子表格”选项,就像绑定到电子表格的脚本中的情况一样。
    • 实际情况并非如此,但无论如何,您可以通过编程方式创建触发器:function createSpreadsheetEditTrigger() { var ss = SpreadsheetApp.openById('SPREADSHEET_ID'); ScriptApp.newTrigger('TRIGGER_FUNCTION_NAME').forSpreadsheet(ss).onEdit().create(); } 。我测试了上述场景,一切都按预期工作:) 如果您有任何问题,请告诉我!
    • 谢谢 Ale ...我现在可以通过编辑电子表格来运行独立脚本。谢谢。但是,尽管调用了 getActiveSheet() 函数,它似乎引用了电子表格中的第一张工作表。 var ss = SpreadsheetApp.openByUrl(clientLoadRegUrl);console.log(ss.getName()) // correctconsole.log(ss.getId()) // correctvar as = ss.getActiveSheet(); console.log(as.getName()) // 错误,给出第一张表
    • var ss = SpreadsheetApp.openByUrl(clientLoadRegUrl);console.log(ss.getName()) // correctconsole.log(ss.getId()) // correctvar as = ss.getActiveSheet();console.log(as.getName()) // wrong, giving the first sheet
    • 使用getSheetByName(NAME_OF_THE_SHEET_YOU_WANT) 而不是getActiveSheet()
    【解决方案3】:

    每个编辑器都可以访问所有共享代码。 检查this website 要为编辑器隐藏代码,只能对代码进行混淆处理。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2013-04-11
    • 2022-06-30
    相关资源
    最近更新 更多