2017-03-26 6 views
1

私はしばらくの間、Googleスクリプトを使用してきました。スクリプトの目的は、非表示/非表示のドロップダウンが選択されたときに、3つのタブ内の特定の行の表示/非表示を切り替えることです。私は潜在的に2つの問題を解決したいと思うし、そこに何か有益な情報を見つけることができないinterwebs:Google Script - タイムアウトと簡略化

1)私はスクリプトが動作の順に実行されると思う。そのため、タブのドロップダウンを選択すると、スクリプトの最初の「レイヤー」であるため、すぐに結果が得られます。 2番目のタブはスクリプトの2番目のレイヤーなので遅く、3番目のタブは3番目のレイヤーなのでかなり時間がかかります。このスクリプトを合理化してタブ機能を同等に高速にする方法はありますか?

2)3番目のタブでは、スクリプトがタイムアウトするように見えます。すべての行は表示されませんが、ドロップダウンで非表示にすると、特定の行で停止します。ただし、スクリプトに行って手動で実行すると、完全に機能します。以下は、私が使用しているスクリプト(私は下の行の多くを削除しは、それ以外の場合はかなり長くなるでしょう)です。

function onEdit(e) { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var s = ss.getSheetByName("TX MD 2017");   
    var row = s.getRange('C2').getValues();       
s.showRows(1); 
for(var i=0; i< row.length; i++){ if(row[i] == 'hide') 
    { s.hideRows(5); 
     s.hideRows(7); 
     s.hideRows(9);} 

    else if(row[i] == 'unhide'){s.unhideRow(ss.getDataRange());} 
}  
s = ss.getSheetByName("DC MD 2017");   
    row = s.getRange('C2').getValues();       
s.showRows(1); 
for(var i=0; i< row.length; i++){ if(row[i] == 'hide') 
    { s.hideRows(6); 
     s.hideRows(7); 
     s.hideRows(9); }       
    else if(row[i] == 'unhide'){s.unhideRow(ss.getDataRange());} 
           } 
s = ss.getSheetByName("ATL MD 2017");   
row = s.getRange('C2').getValues(); 
s.showRows(1); 
for(var i=0; i< row.length; i++){ if(row[i] == 'hide') 
    {s.hideRows(6); 
     s.hideRows(7); 
     s.hideRows(9);}       
    else if(row[i] == 'unhide'){s.unhideRow(ss.getDataRange());} 
           } 
} 
+0

、私は' for'が必要ではないと思います。また、あなたは 'ss.getDataRange()'を3回呼び出しましたが、その値は変更されません。 –

答えて

1

このライン:

s.unhideRow(ss.getDataRange()); 

は次のようになります。

s.showRows(1, s.getLastRow()); 

s.unhideRow(ss.getDataRange())では、スプレッドシート全体のデータ範囲が取得されています。
ドキュメントの状態:

おそらく、なぜコードがとても遅い実行されていたスプレッドシート内のすべてのデータ

からなる範囲。

コードがに統合することができます。c2`は、単一のセルである `ので

function onEdit(e) { 
    var arrayOfRowsToHide,i,j,k,L,objectOfSettings,row,s,ss; 

    ss = SpreadsheetApp.getActiveSpreadsheet();      

    objectOfSettings = { 
    "TX MD 2017":[5,7,9], 
    "DC MD 2017":[6,7,9], 
    "ATL MD 2017":[6,7,9] 
    } 

    for (k in objectOfSettings) {//Loop through all settings 
    s.showRows(1); 
    s = ss.getSheetByName(k);//get this sheet by name 
    row = s.getRange('C2').getValues(); 
    Logger.log('row: ' + row) 
    L = row.length;//The number of rows to check 

    arrayOfRowsToHide = objectOfSettings[k];//Get array of row numbers 

    for (i=0; i<L; i++) {//Loop through all rows in the data from getValues() 
     if(row[i] === 'hide') { 
     for (j=0;j<arrayOfRowsToHide.length;j++) {//hide all rows 
      s.hideRows(arrayOfRowsToHide[j]); 
     } 
     break;//If this row has a status of "hide" then hide rows and quit 
     } else if (row[i] === 'unhide') { 
     s.showRows(1, s.getLastRow());//show all rows in the sheet 
     break;//continue to next sheet 
     } 
    } 
    } 
} 
+0

お返事ありがとうございます。私はs.showRows(1、s.getLastRow())を配置し、より速く進んでいるようです。私は整理を整えるために努力しますが、学習曲線を乗り越えるのに少し時間がかかるかもしれません。再度、感謝します。 – davecut85