从菜单运行时,消息框不会弹出。这个功能也很慢

问题描述:

我有两个问题。从菜单运行时,消息框不会弹出。这个功能也很慢

1)我的功能noDateAlert();是SLOW。任何建议,使其少于5秒?目前需要17-30,具体取决于需要检查的线数。

2)当我在自定义菜单的另一个函数中运行noDateAlert();时,错误消息不会弹出。当我从脚本页面自行运行它时,它工作正常。当在脚本页面的其他程序中运行时,它也可以正常工作。

我使用这个程序来警告我,如果3个单元格是空的。

当它被包含在另一个函数中时,它是第一个列出的东西。

这里的功能:

function noDateAlert() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sh0 = ss.getSheetByName("Loads"); 

    // get data from Loads sheet 
    var data = sh0.getRange(8,29,53,31).getValues(); 
    var data2 = sh0.getRange(8,3,53,3).getValues(); 


    for(var i=0; i < 45; i++) { //Controls how many rows it goes through for posting // len = data.length; i < len 

    //Only work on loads currently wanting to post 
    if(data2[i][0] == "P-Post"){ 

    //Warn me if all 3 cells in one row are empty/blank 
    if(data[i][0] == "" && data[i][1] == "" && data[i][2] == ""){ 
      Browser.msgBox("Some of the loads you want to post are missing dates. Please check dates and run 'Post Loads' again."); 
      return false; 
      break; 
     }; 
     }; 
    }; 
}; 
+0

为什么'data2'获得3列数据?显示的代码仅从索引零获取数据。如果这是您所需要的,您可以将其更改为1列数据。 –

+0

不,我需要全部3列。我有3列日期,所以我可以插入最多3个日期。如果它们都是空白的,我需要弹出警告。如果有一种方法可以将所有3看作可能有所帮助的一个对象。 – Clayten

试试这个你MSGBOX。我会继续研究其他问题。

SpreadsheetApp.getUi().alert('Some of the loads you want to post are missing dates. Please check dates and run \'Post Loads\' again.'); 

我不知道您的数据,但我怀疑我是这样做的。但既然你有权访问和了解你的数据,我会假设把这个分解成两个范围是有道理的。但是,我希望你认识到data2 [i] [0]实际上是第3列,而data [i] [0]实际上是第29列。由于您在两个范围中指定了53行,因此我将53的i值限制在53。但是,再次。我不知道细节,也不能访问数据。所以如果这没有帮助,你可以改回它。

function noDateAlert() 
{ 
    var ss=SpreadsheetApp.getActiveSpreadsheet(); 
    var sh0=ss.getSheetByName("Loads"); 
    var data = sh0.getRange(8,29,53,31).getValues(); 
    var data2 = sh0.getRange(8,3,53,3).getValues(); 
    for(var i=0;i<53;i++) 
    { 
     if(data2[i][0]=="P-Post") 
     { 
     if(!data[i][0] && !data[i][1] && !data[i][2]) 
     { 
      SpreadsheetApp.getUi().alert('Some of the loads you want to post are missing dates. Please check dates and run \'Post Loads\' again.'); 
      return false; 
     } 
     } 
    } 
} 
+0

我确实尝试了4 &&段,它的工作原理与将它分解为两个if语句相同。如果没有P-Post,虽然没有意义检查其他3列。我会检查你有什么,看看它如何改善事情。谢谢! – Clayten

+0

我把我分成两个范围,因为表格中有很多数据,我不希望它每次都收集所有的数据。我只需要列C和列AC:AE。 – Clayten

+0

所以我尝试了SpreadsheetApp.getUi()。alert('你想要发布的一些负载缺少日期,请检查日期并再次运行\'Post Loads \'。我遇到了和以前一样的问题。如果我从脚本编辑器手动运行它,它会起作用。如果我将其作为定时触发器运行或从程序内运行,则不会。 – Clayten