如何解决Formula可在Google App脚本控制台中运行,但会在电子表格中返回身份验证错误 问题和解决方法: 1准备脚本 2部署Web应用 4测试此替代方法注意:参考文献:
我为自己的一个电子表格创建了一个自定义公式。它获取两个Date参数,并返回特定Google Analytics(分析)事件的总唯一事件总数。当我测试代码时,它可以完美地在Google Apps脚本中运行。但是,当我尝试在关联的电子表格中使用相同的公式时,会导致以下错误:
GoogleJsonResponseException:对analytics.data.ga.get的API调用失败,并出现错误:请求缺少必需的身份验证凭据。预期的OAuth 2访问令牌,登录cookie或其他有效的身份验证凭据。参见https://developers.google.com/identity/sign-in/web/devconsole-project。 (第13行)。
这是我的代码:
var tableId = 'ga:78467590';
function test(){
USE_CLICK_COUNT("2020-08-31","2020-09-06");
}
function USE_CLICK_COUNT(startDate,endDate){
var optArgs = {
'dimensions':'ga:eventLabel','filters':'ga:eventLabel=~^UseClick'
};
var results = Analytics.Data.Ga.get(tableId,startDate,endDate,'ga:uniqueEvents',optArgs);
Logger.log(results.getTotalsForAllResults());
return results.getTotalsForAllResults();
}
当我运行test()
函数时,它返回并记录{ga:uniqueEvents=13}
-这是我要查找的数字。
我已经一遍又一遍地检查了API和配置详细信息,但无法弄清缺少的内容。请参阅附件。
解决方法
问题和解决方法:
我认为您的情况与this thread相同。不幸的是,在当前阶段,高级Google服务的Google API无法直接与自定义功能一起使用。因为无法在定制功能上检索访问令牌。看来这是当前的规范。因此,作为实现目标的解决方法,它使用由Google Apps脚本创建的Web Apps。
但是我认为您问题的脚本与this thread有点不同。因此,当提出示例脚本时,它可能对您有用。因此,我想介绍实现目标的示例脚本。
1。准备脚本。
请复制以下脚本并将其粘贴到脚本编辑器中并保存。
示例脚本:// This is your script.
var tableId = 'ga:78467590';
function test(){
USE_CLICK_COUNT("2020-08-31","2020-09-06");
}
function USE_CLICK_COUNT(startDate,endDate){
var optArgs = {
'dimensions':'ga:eventLabel','filters':'ga:eventLabel=~^UseClick'
};
var results = Analytics.Data.Ga.get(tableId,startDate,endDate,'ga:uniqueEvents',optArgs);
Logger.log(results.getTotalsForAllResults());
return results.getTotalsForAllResults();
}
// I added below script.
const key = "samplekey"; // This is used as the key for running the Web Apps.
// Web Apps using as the wrapper.
function doGet(e) {
if (e.parameter.key === key) {
const res = USE_CLICK_COUNT(e.parameter.startDate,e.parameter.endDate);
return ContentService.createTextOutput(JSON.stringify(res));
}
return ContentService.createTextOutput("Error.");
}
// This is used as the custom function.
function RUN_USE_CLICK_COUNT(startDate,endDate) {
const url = `https://script.google.com/macros/s/###/exec?startDate=${startDate}&endDate=${endDate}&key=${key}`; // Please set the URL of Web Apps after you set the Web Apps.
return UrlFetchApp.fetch(url).getContentText();
}
2。部署Web应用。
-
在脚本编辑器上,通过“发布”->“部署为Web应用程序”打开一个对话框。
-
为“以以下方式执行应用”:选择“我” 。
- 通过这种方式,脚本以所有者身份运行。
-
为“有权访问该应用的用户:” 选择“任何人,甚至是匿名的” 。
- 在这种情况下,不需要请求访问令牌。我认为我建议使用此设置来测试此变通办法。
- 当然,您也可以使用访问令牌。但是,在这种情况下,当使用访问令牌时,该示例脚本不能直接用作自定义函数。因此,在这个答案中,我建议使用该密钥来运行Web Apps脚本。但是,如果您想使用访问令牌,我认为可以使用PropertiesService来实现。
-
单击“部署”按钮作为新的“项目版本”。
-
自动打开“需要授权”对话框。
- 点击“查看权限”。
- 选择自己的帐户。
- 在“此应用未验证”中单击“高级”。
- 点击“转到###项目名称###(不安全)”
- 单击“允许”按钮。
-
单击“确定”。
-
复制Web应用程序的URL。就像
https://script.google.com/macros/s/###/exec
。- 修改Google Apps脚本后,请重新部署为新版本。这样,修改后的脚本将反映到Web Apps。请注意这一点。
-
请将上述脚本的
https://script.google.com/macros/s/###/exec
的URL设置为url
。并请重新部署Web Apps。这样,最新的脚本就会反映到Web应用程序中。所以请注意这一点。
4。测试此替代方法。
请把=RUN_USE_CLICK_COUNT("2020-08-31","2020-09-06")
放在一个单元格中。这样,"2020-08-31","2020-09-06"
的值将发送到Web Apps,并返回USE_CLICK_COUNT
中的值。
注意:
- 修改Google Apps脚本后,请重新部署为新版本。这样,修改后的脚本将反映到Web Apps。请注意这一点。
参考文献:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。