0

Googleシートに、開いたときにシートのすべてのタブのフィルタをクリア/削除するスクリプトがあります。これは、一番上の行をつかんでから削除し、フィルタなしで置き換えることで実現します。Googleシートのフィルタをクリア/削除するスクリプト

しかし、スプレッドシートは6枚のタブでスプレッドシートを処理するには多すぎるようです。実行すると、データが表示されずに2〜3タブが完全に灰色になります。灰色のセルをダブルクリックすると、「これらのセルは現在ロードされています。ロードが完了すると再試行してください」というメッセージが返されます。どれくらい待っても、データは表示されません。ページ3または4をさらにリフレッシュすると、すべてのタブに最終的にデータが表示されます。

私は、ページを更新する必要がないように、コードをクリーンアップしたり、新しいスクリプトを作りたいと思っています。私は2つのタブだけでシート上のスクリプトを使用し、それは正常に働いたので、私はそれがデータの量とは関係がないと思う。

公正な警告:私は極端な初心者ですので、コードと書式設定はかなり醜いです。ここで

は、シートのコピーへのリンクです:

https://docs.google.com/spreadsheets/d/1cg4wVIHPumahQgf5gorc4JQXsG_6l4eg3OhONABx8gs/edit#gid=369791415

そして、ここでは、スクリプトのコード(それは各タブのコードの繰り返しチャンクである)である:

function myFunction() 
{ 
var row2 = 1 //the row with filter 
var rowBefore2 = row2 
var Sheet2 = SpreadsheetApp.getActiveSpreadsheet(); 

SpreadsheetApp.setActiveSheet(Sheet2.getSheets()[1]); 

Sheet2.insertRowBefore(row2); //inserts a line before the filter 
row2++; 

var Line2 = Sheet2.getRange(row2 + ":" + row2); //gets the filter line 
Line2.moveTo(Sheet2.getRange(rowBefore2 + ":" + rowBefore2)); //move to 
new line 
Sheet2.deleteRow(row2); //deletes the filter line - this clears the 
filter 

var row3 = 1 
var rowBefore3 = row3 
var Sheet3 = SpreadsheetApp.getActiveSpreadsheet(); 

SpreadsheetApp.setActiveSheet(Sheet3.getSheets()[2]); 

Sheet3.insertRowBefore(row3); 
row3++; 

var Line3 = Sheet3.getRange(row3 + ":" + row3); 
Line3.moveTo(Sheet3.getRange(rowBefore3 + ":" + rowBefore3)); 
Sheet3.deleteRow(row3); 

var row4 = 1 //the row with filter 
var rowBefore4 = row4 
var Sheet4 = SpreadsheetApp.getActiveSpreadsheet(); 

SpreadsheetApp.setActiveSheet(Sheet4.getSheets()[3]); 

Sheet4.insertRowBefore(row4); 
row4++; 

var Line4 = Sheet4.getRange(row4 + ":" + row4); 
Line4.moveTo(Sheet4.getRange(rowBefore4 + ":" + rowBefore4)); 
Sheet4.deleteRow(row4); 

var row5 = 1 //the row with filter 
var rowBefore5 = row5 
var Sheet5 = SpreadsheetApp.getActiveSpreadsheet(); 

SpreadsheetApp.setActiveSheet(Sheet5.getSheets()[4]); 

Sheet5.insertRowBefore(row5); 
row5++; 

var Line5 = Sheet5.getRange(row5 + ":" + row5); 
Line5.moveTo(Sheet5.getRange(rowBefore5 + ":" + rowBefore5)); 
Sheet5.deleteRow(row5); 

var row6 = 1 
var rowBefore6 = row6 
var Sheet6 = SpreadsheetApp.getActiveSpreadsheet(); 

SpreadsheetApp.setActiveSheet(Sheet6.getSheets()[5]); 

Sheet6.insertRowBefore(row6); 
row6++; 

var Line6 = Sheet6.getRange(row6 + ":" + row6); 
Line6.moveTo(Sheet6.getRange(rowBefore6 + ":" + rowBefore6)); 

Sheet6.deleteRow(row6); 

var row7 = 1 
var rowBefore7 = row7 
var Sheet7 = SpreadsheetApp.getActiveSpreadsheet(); 

SpreadsheetApp.setActiveSheet(Sheet7.getSheets()[6]); 

Sheet7.insertRowBefore(row7); 
row7++; 

var Line7 = Sheet7.getRange(row7 + ":" + row7); 
Line7.moveTo(Sheet7.getRange(rowBefore7 + ":" + rowBefore7)); 

Sheet7.deleteRow(row7); 

}

+0

削除する代わりに、このスレッドの最後の回答を見てください - > http://stackoverflow.com/questions/26807618/how-can-i-remove-all-filters-in-a- google-spreadsheet-using-google-apps-script – Rodger

答えて

0

それらを介してすべてのシートおよびループのアレイを得る:

function myFunction() { 

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheets =ss.getSheets() //get array of all sheets 
    for(i=0;i<sheets.length;i++){ //for each sheet 
var row2 = 1 //the row with filter 
var rowBefore2 = row2 
var s=SpreadsheetApp.setActiveSheet(ss.getSheets()[i]); 

s.insertRowBefore(row2); //inserts a line before the filter 
row2++; 

var Line2 = s.getRange(row2 + ":" + row2); //gets the filter line 
Line2.moveTo(s.getRange(rowBefore2 + ":" + rowBefore2)); //move to new line 
s.deleteRow(row2); //deletes the filter line - this clears the filter 
    }} 
1

シートを直接参照するのではなく、ループします。そして、あなたがしたいコードを貼ってください...これはこのように見えるはずです。私はあなたのシートをコピーし、そこにコードを入れて、それをあなたに戻しました。それは数秒で実行され、灰色のページがあります。私はあなたがインポート範囲をやっているシートにアクセスできない。このスクリプトであなたがまだ灰色であることが判明した場合、それは問題に関連している可能性があります。

function removeFilters() { 
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); 
    var row1 = 1; 
    var lastColumn = 20 
    for (var i = 0; i < sheets.length ; i++) { 
     var sheet = sheets[i]; 
     sheet.activate(); 
     lastColumn = sheet.getLastColumn() 
     sheet.insertRowBefore(row1); //inserts a line at the top 
     sheet.getRange(row1+1, 1, 1, lastColumn).moveTo(sheet.getRange("a1")); 
     Logger.log("value of i: " + i + " and active sheet is: " + sheet.getName()); 
     sheet.deleteRow(row1+1); 
     }  

} 
関連する問題