如何保护Google电子表格中的Apps脚本代码?

时间:2013-04-18 05:53:35

标签: google-apps-script google-sheets

我已经使用脚本编辑器为我的Google电子表格编写了一些代码。

我想与我的客户分享此电子表格,但我不想分享我写的代码。

此代码在我的电子表格中添加了一个菜单,其中包含当我的客户打开此电子表格时应该工作/运行的有用功能,其中应用了以下条件:他们不应该看到它的代码。

使用Excel很容易,但我不知道谷歌电子表格。 。我在Google上搜索了很多,但他们都提出了如何共享电子表格的想法。例如在“查看”模式下,但在这种情况下有一个问题:我的菜单功能,它添加了一个菜单,是“onOpen”,并且在我的客户打开它时不会启动。

如何在Google电子表格中实现此功能?

6 个答案:

答案 0 :(得分:15)

简答

Publish您的脚本作为插件。请记住,您可以通过选择不公开或选择与Google群组共享来将其设为私有。

解释

2014年添加了加载项。这比使用库更好,因为您的加载项不会共享任何内容。

即使您的插件用户能够从您的插件中获取来自crx文件的Google Apps脚本项目网址,因为它不会被共享,但他们将无法访问该代码。

请注意

  • 无法使用Chrome开发者工具或其他类似软件访问Google Apps脚本服务器端代码。
  • 附加组件有一些限制,请仔细研究,因为这个替代方案可能不适合你。

如果您无法选择以插件形式发布,则应考虑使用Apps脚本API或Google表格API,考虑使用网络应用程序,重新考虑您的解决方案。

参考

答案 1 :(得分:7)

利用图书馆documentation解释了如何使用它,few interesting post上还有the subject

答案 2 :(得分:5)

创建一个特殊的库文件,其中只包含客户端的脚本。您的客户端必须至少具有读取级别访问权限。所以他能够看到你的剧本。删除您的脚本并在该文件中创建一个新的无辜脚本并将其另存为新版本。现在您的客户端只看到这个新脚本。因为他的应用程序仍在使用旧版本的库,原始脚本将照常完成其工作。

答案 3 :(得分:0)

除了脚本编辑器窗口中“发布”菜单下列出的选项之外,以下3个选项还可以将代码保留给开发人员私有。

选项1:
将创建3个文件:
1.1用来接收用户输入的电子表格,它用作用户界面,并与用户共享。
1.2一个独立的库脚本文件,用于接收来自UI电子表格的输入。
1.3一个独立的私有脚本文件,用于处理库文件接收的数据。

Option 1 Spreadsheet

以上链接中的电子表格可作为此选项的参考。
单击“提交”后,电子表格ID将发送到库脚本文件,并为开发人员提供编辑权限。然后,私有脚本文件打开文件并处理输入。

选项2:
要创建5个文件
2.1用作登录屏幕的电子表格。与用户共享。
2.2一个电子表格,用作包含数据的实际应用程序。用户界面。成功登录后,该电子表格可供用户使用。用户从此工作表中注销该应用程序。
2.3维护用户登录状态的电子表格。这是开发人员专用的。
2.4一个库脚本文件,该文件将更新在上述步骤中创建的电子表格中用户的登录状态,并将访问权限更改为私有脚本文件。该脚本文件作为库资源包含在登录电子表格和用户界面电子表格中。
2.5一个库脚本文件,用于处理在用户界面表中输入的数据。此脚本文件包含开发人员希望保留的代码。该文件仅作为库资源包含在用户界面电子表格中。

Option 2 Spreadsheet

以上链接中的电子表格可作为此选项的参考。
当用户单击“开始使用”按钮时,在更新电子表格2.3中的单元格值后,该用户将登录到应用程序。使用addViewer方法成功登录后,包含私有代码的库脚本文件将设置为可共享。该应用程序的链接将显示给用户,并且用户在“登录”时与该应用程序进行交互。当用户从应用程序注销时,将调用removeViewer方法以再次将脚本文件设为私有。
在此选项中,用户在使用应用程序时可以访问私有代码文件。可以使用计时器,脚本触发器,提示,警报等将文件保密。

在我的两个电子表格中,我都使用基于时间的触发器,该触发器设置为每分钟运行一次以处理应用程序。这可能会导致输出延迟。触发器是在服务器端而非客户端创建的。

选项3:私人共享文件夹

将创建2个文件:
3.1用来接收用户输入的电子表格,它用作用户界面,并与用户共享。
3.2用于处理电子表格的独立私人脚本文件。

请参考how to create a private shared folder上的此链接。 在此选项中,用户看不到任何脚本。甚至共享电子表格也可能不包含代码。

答案 4 :(得分:0)

  1. 创建2个库;一个是虚拟的(我称为Lib1),另一个是具有所有秘密代码的核心库(我称为Lib2)。
  2. 将Lib2作为库添加到Lib1中,并使用在Lib2中完全实现的必要方法。
  3. 公开共享两个库,并将其权限设置为Viewer。
  4. 在Lib1的共享设置页面中,有一个齿轮符号。确保未选中以下选项“查看者和评论者可以看到下载,打印和复制的选项”
  5. 将Lib1添加到客户的脚本(可能是电子表格脚本)。
  6. 以编辑者或查看者身份共享客户端的脚本。

如果客户端可以通过从脚本的资源/库菜单访问它来获取Lib1 ID,则他将无法访问Lib1的资源/库菜单。由于步骤4中未选中的选项,他也无法再复制Lib1,从而使他可能看不到Lib2的ID。

答案 5 :(得分:0)

有一个类似的问题 here。答案在那里被接受。

您可以创建一个独立的应用程序脚本项目。然后从您的 google sheet 脚本编辑器调用具有适当参数的独立应用程序脚本项目函数。这样,您在独立项目中的机密将得到保护。