无法运行绑定到新空白文档的简单应用程序脚本 - 获取“此应用程序已被阻止”

big*_*osh 10 google-apps-script google-cloud-platform

我无法在我的谷歌帐户中运行任何应用程序脚本 - 即使是我创建的脚本绑定到我创建的新文档。当我这样做时,我收到“此应用程序被阻止”错误。请注意,这与其他地方提到的“暂时禁用此应用程序登录”失败模式不同,该问题的解决方案对此没有影响。

\n

为了测试,我在登录我的个人谷歌帐户时创建了一个新的电子表格,并将值放入ONE单元格中A1......

\n

在此输入图像描述

\n

然后,我Tools->Script从该电子表格的菜单栏中打开编辑器并输入以下简单的脚本......

\n

在此输入图像描述

\n

然后,我单击脚本编辑器菜单栏中的运行图标,并从下拉列表中选择函数“myFunction”。

\n

我收到“需要授权”弹出窗口,因此我单击“查看权限”...

\n

在此输入图像描述

\n

然后,我会看到“选择一个帐户”弹出窗口,然后单击我的帐户(唯一登录的帐户,与我创建工作表和脚本时登录的帐户相同)...

\n

在此输入图像描述

\n

然后我会看到“应用程序被阻止”弹出窗口。检查执行日志发现脚本没有运行。

\n

在此输入图像描述

\n

是什么导致了这个弹出窗口,如何防止这种情况发生,以便我可以运行应用程序脚本?

\n

注意:我看到许多其他问题描述了此问题的更复杂版本,但没有一个有有用的答案。我希望这个问题的超级简单版本将有助于缩小范围并得到解决。

\n

更多意想不到的行为:

\n

如果我将代码放入函数中,onLoad()它就可以正常工作,甚至不会要求我授权。

\n

如果我输入此代码:\n在此输入图像描述

\n

...然后退出并重新加载工作表,然后我在执行日志中得到这个...\n在此输入图像描述

\n

同样,这根本没有授权弹出窗口。该工作表加载不会中断,然后该条目将出现在执行日志中。因此,这似乎不是某个地方没有正确权限的情况,因为代码显然可以访问该工作表。

\n

旧版编辑器

\n

旧版编辑器下的相同行为......

\n

在此输入图像描述

\n

其他账户

\n

我可以在不同的谷歌帐户上重复这些完全相同的步骤,并且效果很好,因此这个问题似乎与我的帐户有关。互联网上的许多其他人也注意到了同样的发现。似乎可能有一些隐藏的(可能是无意的)设置附加到帐户,以某种方式进行切换,然后帐户无法手动授权脚本运行。

\n

改变项目

\n

我检查了一下,这个脚本按预期位于“默认”项目中......

\n

在此输入图像描述

\n

根据这个页面

\n
\n

对于大多数应用程序和脚本,您永远不需要查看或调整此默认 GCP 项目\xe2\x80\x94Apps 脚本会自动处理与 Google Cloud Platform 的所有必要交互。

\n
\n

由于我没有什么可失去的,因此尝试在 Google Cloud Platform 控制台中创建一个新项目,然后尝试将此脚本分配给该新项目。不幸的是,当我尝试时,我得到了正常的“需要授权”弹出窗口,这导致了这个 opdd 页面......

\n

在此输入图像描述

\n

单击“解决此问题”链接会将我带到此页面...

\n

在此输入图像描述

\n

...这似乎表明我没有权限解决我自己帐户上的问题。

\n

这似乎再次表明我的帐户在谷歌服务器上配置有误。:/

\n

big*_*osh 6

不幸的是,那里没有好的答案。很多像我这样的人在某个早晨醒来时发现他们无法再在他们的帐户中运行任何新的应用程序脚本。

我找到了一个非常有效的解决方法......但会让你非常难过。

此问题不会影响自动运行的代码,因此onOpen()和等功能onEdit()运行得很好,并且可以完全访问绑定文档。您听说过,谷歌会阻止用户明确请求运行以保护其数据的代码,但是每当打开或修改工作表时都会静默自动运行的代码可以自由运行和访问(并更改!)它想要的任何数据。

因此,为了让用户运行您的代码,您可以在电子表格中选择一个单元格,该单元格的值可以在您希望代码运行时更改,或者创建一个名为“编辑此单元格以运行程序”的特殊单元格。

然后,您将代码放入并onEdit()(如果需要)检查以查看特殊单元格是否已更新。如果是这样,则运行您的任意代码。它可以完全访问电子表格,可以随意读取和更新单元格,还可以写入日志。

请注意,您必须关闭工作表并重新打开它才能使代码生效。

这是我的演示电子表格的样子...

在此输入图像描述

...这是演示代码...

function onEdit(e) {
  var range = e.range;
  const triggerCell = "B2";
  if( e.range.getA1Notation() === triggerCell){
    var sheet = SpreadsheetApp.getActiveSheet();
    var data = sheet.getDataRange().getValues();
    var rangeB1 =sheet.getRange("B1");
    var rangeB2 =sheet.getRange("B2");
    var date = Utilities.formatDate(new Date(), Intl.DateTimeFormat().resolvedOptions().timeZone, "HH:mm:ss"); 
    rangeB2.setValue("Code ran at " + date );
    Logger.log( date + ": B1=" + rangeB1.getValue() );
  }
}
Run Code Online (Sandbox Code Playgroud)

这是一个演示视频...

https://youtu.be/ypuLaUWn1R8

我以前说过,我会再说一遍 - 如果您正在考虑使用 Google 云服务进行任何操作,请再考虑一下。这是建立在垃圾之上的垃圾,谷歌没有人理解它,它偶尔会突然和灾难性地崩溃,甚至没有人能告诉你发生了什么,更不用说如何、何时或是否会得到修复。


归档时间:

查看次数:

3789 次

最近记录:

3 年,12 月 前