2017-08-29 18 views
1

我有兩個問題。從菜單運行時,消息框不會彈出。這個功能也很慢

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

回答

0

試試這個你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