我有problem Cooper帮助我解决它(再次感谢),但现在我正在与另一个人挣扎。以下脚本将计算客户端代码在昨天使用第二个条件时在另一个电子表格上显示的次数。
function countSheets()
{
var vA = appSh();
var td = Utilities.formatDate(subDaysFromDate(new Date(),2), Session.getScriptTimeZone(), "dd/MM/yyyy");
var mbs=getAllSheets();
//var s='';
for (var i=2;i<vA.length;i++)
{
var d = Utilities.formatDate(new Date(vA[i][12]), Session.getScriptTimeZone(), "dd/MM/yyyy");
for(var key in mbs)
{
if(vA[i][0]==key && d==td)
{
mbs[key]+=1;
}
}
}
return mbs;
}
然后我有下面的代码,它将在主电子表格(表格)中搜索一个字符串,当找到时将返回行号,也会在昨天搜索日期并返回列号。根据这些信息,我将获得需要粘贴第一个脚本的计数结果的范围。
function runScript()
{
var ss=SpreadsheetApp.openById('ID');
var mbs=countSheets();
for(var key in mbs)
{
var sh=ss.getSheetByName(key);
var rg=sh.getDataRange();
var vA=rg.getValues();
for(var i=0;i<vA.length;i++)
{
if(vA[i][1]=='Total Number of Applications')
{
var nr=i;
break;//by terminating as soon as we find a match we should get improved performance. Which is something you cant do in a map.
}
}
if(typeof(nr)!='undefined')//If we don't find a match this is undefined
{
var today=subDaysFromDate(new Date(),2).setHours(0,0,0,0);
for(var i=0;i<vA[3].length;i++)
{
if(vA[3][i])//Some cells in this range have no contents
{
if(today.valueOf()==new Date(vA[3][i]).valueOf())
{
sh.getRange(nr+1,i+1,1,1).setValue(Number(mbs[key]));
}
}
}
}
}
return sh;
}
问题:我在主电子表格上有24行。所以我需要编写相同的脚本24次。例如,我需要计算应用程序总数,呼叫总数,实时广告数等。如果我这样做,它将超过执行时间,因为每个脚本平均需要25秒才能运行。
我在这个网站和互联网上做了一些研究,并阅读了关于存储价值并一遍又一遍地重复使用它们的内容。目前,我的脚本必须每次都通过同一个文件并计算每个条件。
Q1:是否有机会创建另一个包含第二个脚本中所有字符串的数组?
Q2:如何使用PropertiesService或其他任何内容来存储数据,而不必反复运行getValues()
?我已经阅读过Google文档,但对此并不了解。
我希望这一切都有意义并且可以解决这个问题。
我最诚挚的问候,
谢谢!
答案 0 :(得分:0)
您可能应该将其写入几行,然后查看其中的两行并查看每个行的唯一性。每个人的独特之处在于你必须弄清楚如何通过外部函数调用来存储或访问。
时间问题可能要求您单独运行这些功能。我有一个用于加载数据库的对话框。它加载800行并等待10秒然后加载另外800行并等待10秒并继续这样做直到没有更多行。确实这需要大约10分钟才能做到这一点,但是我可以在它正在工作的时候做其他事情所以我真的不在乎需要多长时间。我确实最大限度地减少了对Google服务器的影响,所以我不会为了好玩而运行这样的东西。
顺便说一下,10秒延迟是gs函数的外部。