从菜单运行时,不会弹出消息框.此功能也很慢



我有两个问题。

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;
};
};
}; 
};

在您的消息框中尝试此操作。我会继续研究另一个问题。

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行,因此我将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;
}
}
} 
}

最新更新