2016-07-27 4 views
0

ここにnoobというスクリプトがありますので、800行未満のシートがあればスクリプトはうまく動作しますが、今回は1500行ほどのシートがあり、スクリプトがタイムアウトします。Googleシートスクリプト、タイムアウト。新しい方法が必要な場合や逆さにする場合は

基本的に見積もりを取得するのが簡単です。 (すぐにここでは5-6分を意味し、問題ではありません)計算で列を非表示にし、機密情報を含む列と列Hに値がない行を非表示にします。

私が知りたいのは、別のコードと同じか、誰かがgetRange()を作る方法を知っている場合はgetValue();シートの一番下から始めて、シートを完成させて印刷可能な見積もりを作成するために、2つのスクリプトを順に開始することができます。

ご協力いただきまして誠にありがとうございます。ここ

多くのおかげ

はスクリプトです:

function Quote() 
{ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s = ss.getSheetByName("Quote"); ` 


    var datarange = s.hideColumns(6); 
    var datarange = s.hideColumns(9); 
    var datarange = s.hideColumns(10); 
    var datarange = s.hideColumns(12); 
    var datarange = s.hideColumns(13); 
    var datarange = s.hideColumns(14); 

    var lastRow = s.getLastRow(); 
    for(i=1 ; i<=lastRow ; i++) { 

     var status = s.getRange("H"+i).getValue(); 
     if (status == "") { 
     s.hideRows(i); 
     } 
    } 
} 
+0

へようこそ[そう]。 [ツアー]とチェックアウト[質問]をしてください。 –

答えて

0

あなたの問題は、行です:

s.getRange("H"+i).getValue() 

このコードは、スプレッドシートからデータを受け取り、あなたがそれを使用する場合、これは非常に遅いプロセスであり、内部ループ。あなたはこのconctructionを使用することがあります。

var data = s.getDataRange().getValues(); 

    for (var i=0; i < data.length; i++) { 
     var status = data[i][7]; // takes column H   
     // other code goes here...   
    } 

あなたは一度だけgetDataRange()を使用してスプレッドシートからデータを読み出して、getValues()を配列に変換この方法です。その後、ループはより速く動作するはずです。アレイは、ループ内の行を隠すための相続人、0からコードを開始するため

列を隠し、1を追加してください:

if (status == "") { 
    s.hideRows(i + 1); // adding 1 
    } 
関連する問題