我有一个客户站点列表,我想不断检查它们是否安装了我们的 GTM 容器标签。 我无法将电子表格连接到我们的 GTM,因为我公司的通用登录名与我用于电子表格的 Google 帐户不同,而且我无法将自己的个人标签添加到容器中时间。 我让它一次在一个站点上完美运行,更改脚本中的单元格,但当我尝试让它检查所有站点时,我似乎无法让它运行。我还希望它在不从脚本编辑器运行的情况下循环。似乎使用 array.map 可以同时解决这两个问题,但我就是不知道如何使用它。我对这一切还是很陌生。 这是我针对各个站点的工作代码(url 列和 gtm 列是 Xlookups,但如果 xlookups 不起作用,我可以参考实际数据):
function verifyGTM() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('February 2023 Paste');
var urlRange = s.getRange(5,10);
var gtmRange = s.getRange(5,11);
var url = urlRange.getDisplayValues();
var gtmID = gtmRange.getDisplayValues();
var str = UrlFetchApp.fetch(url).getContentText();
const mainRegex = /<!-- Google Tag Manager -->([\s\S]*?)<!-- End Google Tag Manager -->/gi;
var results = str.match(mainRegex);
Logger.log(results)
if(str.includes("GTM") && str.includes(gtmID) && !gtmID == "N/A"){
s.getRange(5,12).setValue("Yes");
}
else if(str.includes("GTM") && !str.includes(gtmID)){
s.getRange(5,12).setValue("Incorrect GTM");
}
else if(gtmID == "N/A"){
s.getRange(5,12).setValue("No GTM");
}
else {
s.getRange(5,12).setValue("No");
}
}
这是一个删除了一些敏感数据的示例电子表格:https://docs.google.com/spreadsheets/d/10xgrGVbIiPJiYis3jkBsoyzAUkudOjLLKgYRMGPVsYQ/edit?usp=sharing
我有一些 onEdit 脚本在运行,但我认为这些不会影响这个。
我尝试使用 fetchAll,如下所示:
function verifyGTM() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('February 2023 Paste');
var urlRange = s.getRange("J:J");
var gtmRange = s.getRange("K:K");
var url = urlRange.getDisplayValues();
var gtmID = gtmRange.getDisplayValues();
var str = UrlFetchApp.fetchAll(url).getContentText();
const mainRegex = /<!-- Google Tag Manager -->([\s\S]*?)<!-- End Google Tag Manager -->/gi;
var results = str.match(mainRegex);
Logger.log(results)
if(str.includes("GTM") && str.includes(gtmID) && !gtmID == "N/A"){
s.getRange("L:L").setValue("Yes");
}
else if(str.includes("GTM") && !str.includes(gtmID)){
s.getRange("L:L").setValue("Incorrect GTM");
}
else if(gtmID == "N/A"){
s.getRange("L:L").setValue("No GTM");
}
else {
s.getRange("L:L").setValue("No");
}
}
我收到了这个错误: Exception: 服务在短时间内调用了太多次:urlfetch。在通话之间尝试 Utilities.sleep(1000)。
我试着把 utilities.sleep 放进去,但那也没用。
获取列:
function fetchAColumn() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet Name");
const col1 = sh.getRange(1,1,sh.getLastRow()).getValues();
//col1 is a column of values as a two dimensional array
}
试试这个:
function fetchAColumn() {
const ss = SpreadsheetApp.getActive();
const c = 1; //column number
const sr = 2; //data start row
const sh = ss.getSheetByName("Sheet Name");
const col1 = sh.getRange(sr,c,sh.getLastRow() - sr + 1).getValues().flat();
//col1 is a column of values as a flattened array
}
如果你想用逗号将它们组合起来,你可以使用 join 方法。如果您在某些情况下缺少 url,那么我会使用 filter 方法删除这些行。您没有提供有关数据的任何详细信息,我也没有点击其他电子表格的链接。