从菜单运行时,消息框不会弹出。这个功能也很慢
我有两个问题。从菜单运行时,消息框不会弹出。这个功能也很慢
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;
};
};
};
};
试试这个你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;
}
}
}
}
我确实尝试了4 &&段,它的工作原理与将它分解为两个if语句相同。如果没有P-Post,虽然没有意义检查其他3列。我会检查你有什么,看看它如何改善事情。谢谢! – Clayten
我把我分成两个范围,因为表格中有很多数据,我不希望它每次都收集所有的数据。我只需要列C和列AC:AE。 – Clayten
所以我尝试了SpreadsheetApp.getUi()。alert('你想要发布的一些负载缺少日期,请检查日期并再次运行\'Post Loads \'。我遇到了和以前一样的问题。如果我从脚本编辑器手动运行它,它会起作用。如果我将其作为定时触发器运行或从程序内运行,则不会。 – Clayten
为什么'data2'获得3列数据?显示的代码仅从索引零获取数据。如果这是您所需要的,您可以将其更改为1列数据。 –
不,我需要全部3列。我有3列日期,所以我可以插入最多3个日期。如果它们都是空白的,我需要弹出警告。如果有一种方法可以将所有3看作可能有所帮助的一个对象。 – Clayten