2017-09-03 52 views
0

我有这个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

我对你的途径问题

你或许应该写一对夫妇行,然后看着他们两个,看看各自是独特的一个。每一个独特的是你必须弄清楚如何通过外部函数调用来存储或访问。

时间问题可能需要您单独运行这些功能。我有一个对话框,我用它来加载数据库完全是这样的。它加载800行,等待10秒钟,然后加载另外800行,等待10秒钟,直到没有更多行。真的,大约需要10分钟才能做到这一点,但我可以在做其他事情时做其他事情,所以我不在乎需要多长时间。尽管我尽量减少对Google服务器的影响,但我并不在乎这些只是为了好玩。

顺便说一下,10秒的延迟是外部的gs函数。

+0

它减缓脚本的唯一原因是它必须为每张表获取应用程序表值。运行Sheet1 - > getValues() - >循环,运行表 - > getValues() - >循环...因此我需要一个解决方案来存储该表中的所有值,以重用它们。 –

+0

现实情况是,您无法一次性为所有工作表获取值()。所以一次把它们全部存入并将它们存储在一个数组中并不会对你有太大的好处。听起来你不会在6分钟内完成所有这些工作,所以我想我会继续思考另一种选择。 [''你不能总是得到你想要的东西。但是如果你尝试,有时你可能会发现你得到你需要的东西“](https://www.youtube.com/watch?v=PkGrkNu6mDg) – Cooper

+0

感谢帮助和建议! –

相关问题