【发布时间】:2017-09-03 21:47:03
【问题描述】:
我有这个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 文档,但不能从中理解太多。
我希望这一切都有意义并且可以解决这个问题。
致以最诚挚的问候,
谢谢!
【问题讨论】:
标签: javascript google-apps-script google-apps