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

Javascript 从菜单运行时,不会弹出消息框。这个功能也很慢,javascript,google-apps-script,popup,Javascript,Google Apps Script,Popup,我有两个问题 1) 我的函数noDateAlert()很慢。有什么建议可以让它在5秒钟内完成吗?根据需要检查的线路数量,当前需要17-30条线路 2) 运行noDateAlert()时不会弹出错误消息在我的自定义菜单的另一个函数中。当我从脚本页面自行运行它时,它工作正常。在脚本页面的其他程序中运行时,它也可以正常工作 我用这个程序来警告我3个单元格是否为空 当它包含在另一个函数中时,它是列出的第一件事 下面是函数: function noDateAlert() { var ss = Spr

我有两个问题

1) 我的函数
noDateAlert()很慢。有什么建议可以让它在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;
        };
      };
   }; 
};
函数noDateAlert(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sh0=ss.getSheetByName(“加载”);
//从负载表获取数据
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++){//控制它为过帐而经过的行数//len=data.length;i
在你的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列。我将I的限制保留为53,因为您在两个范围中都指定了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;
         }
      }
   } 
}
函数noDateAlert()
{
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sh0=ss.getSheetByName(“加载”);
var data=sh0.getRange(8,29,53,31).getValues();
var data2=sh0.getRange(8,3,53,3).getValues();

对于(var i=0;i请在您的msgbox中尝试此方法。我将继续研究另一个问题

SpreadsheetApp.getUi().alert('Some of the loads you want to post are missing dates. Please check dates and run \'Post Loads\' again.');
我不了解您的数据,但我怀疑我是否这样做。但由于您可以访问并了解您的数据,我认为将其分为两个范围是有意义的。不过,我希望您认识到,数据2[I][0]实际上是第3列,数据[I][0]实际上是第29列。我将I的限制保留为53,因为您在两个范围中都指定了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;
         }
      }
   } 
}
函数noDateAlert()
{
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sh0=ss.getSheetByName(“加载”);
var data=sh0.getRange(8,29,53,31).getValues();
var data2=sh0.getRange(8,3,53,3).getValues();

对于(var i=0;iWhy是
data2
获取3列数据?显示的代码仅从索引0获取数据。如果您需要,您可以将其更改为1列数据。不,我需要全部3列。我有3列日期,因此最多可以插入3列日期。如果它们都为空,我需要弹出警告。如果有办法将所有3列视为一列,请将其视为一列对象。为什么
data2
获取3列数据?显示的代码仅获取索引0中的数据。如果您需要,可以将其更改为1列数据。不,我需要所有3列。我有3列日期,因此最多可以插入3列日期。如果它们都为空,我需要弹出警告。如果有办法查看所有3列作为一个对象可能会有所帮助。我确实尝试将其作为4个&&段,其工作原理与将其拆分为两个if语句大致相同。如果没有P-Post,则检查其他3列是没有意义的。我将检查您拥有的内容,并看看它如何改进。谢谢!我将其拆分为两个范围,因为sh中有大量数据eet和我不希望每次都必须收集所有数据。我只需要C列和AC:AE列。因此我尝试了SpreadsheetApp.getUi().alert('您要发布的某些加载缺少日期。请检查日期并再次运行'post loads';我遇到了与以前相同的问题。如果我从脚本编辑器手动运行它,它会工作。如果我作为定时触发器或从程序中运行它,它不会工作。问题不在于警报命令。我只是通过更改数据范围来运行它,它运行正常。因此,问题要么在代码中,要么在数据中。我在某些方面进行了数据验证范围。这可能是问题吗?我确实尝试过将其作为4个&&段,其工作原理与将其拆分为两个if语句大致相同。如果没有P-Post,但检查其他3列是没有意义的。我将检查您拥有的内容,看看它如何改进。谢谢!我将其拆分为两个范围,因为t中有大量数据他和我不希望每次都收集所有数据。我只需要C列和AC:AE列。所以我尝试了SpreadsheetApp.getUi().alert('您要发布的一些加载缺少日期。请检查日期,然后再次运行'post loads';我遇到了与以前相同的问题。如果我从脚本编辑器手动运行它,它会工作。如果我作为定时触发器或从程序中运行它,它不会工作。问题不在于警报命令。我只是通过更改数据范围来运行它,它运行正常。因此,问题要么在代码中,要么在数据中。我在某些方面进行了数据验证范围。这可能是问题所在吗?