Как запустить скрипт на всех листах, Google Sheets - PullRequest
1 голос
/ 01 ноября 2019

У меня есть скрипт, который удаляет пустые строки в Google Sheets. В настоящее время он работает только на листе, который я открыл;Я хочу, чтобы он работал на всех листах в документе.

После долгой попытки применить код из вопросов других людей, я просто не могу заставить его работать с моим существующим кодом.

Любые ответы приветствуются.

Это один фрагмент кода, который я пытался использовать, но он не запускается

function saveRange(){
    var tabs = [
        'Sample_tab_1',
        'Sample_tab_2',
        'Sample_tab_3',
        'Sample_tab_4'
    ];

    var ss=SpreadsheetApp.getActiveSpreadsheet();
    for (var i = 0; i < tabs.length; i++) {
        var sheet=ss.getSheetByName(tabs[i]);
        var range=sheet.getRange('A8:AE47').getValues();

        sheet.getRange(sheet.getLastRow()+1, 1, range.length, range[0].length).setValues(range);
    }
  }

Это то, что у меня работает, но только на текущем листе

function readRows() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  var rowsDeleted = 0;
  for (var i = 0; i <= numRows - 1; i++) {
    var row = values[i];
    if (row[2] == 0 || row[2] == '') {
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }
};


function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "Remove rows where column C is 0 or blank",
    functionName : "readRows"
  }];
  sheet.addMenu("Script Center Menu", entries);
};

1 Ответ

1 голос
/ 02 ноября 2019

Вы можете попробовать этот фрагмент кода, но будьте осторожны, это очистит лист КАЖДЫЙ в вашей текущей электронной таблице Google:

function readRows() 
{  
  var spreadsheet = SpreadsheetApp.getActive();
  var ttl = spreadsheet.getSheets().length;
  for (var a=0; a<ttl; a++)
  {
    spreadsheet.getSheets()[a].clear()
    //if you prefer to delete, please replace the above
  }
}

В сочетании с вашим сценарием это может выглядеть такниже:

function readRows() 
{
  var spreadsheet = SpreadsheetApp.getActive();
  var ttl = spreadsheet.getSheets().length;
  for (var a=0; a<ttl; a++)
  {
    var sheet = spreadsheet.getSheets()[a];
    var rows = sheet.getDataRange();
    var numRows = rows.getNumRows();
    var values = rows.getValues();
    var rowsDeleted = 0;
    for (var i = 0; i <= numRows - 1; i++) 
    {
        var row = values[i];
        if (row[2] == 0 || row[2] == '') 
        {
           sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
           rowsDeleted++;
        }
    }
  }
};

Здесь я хотел бы дать модификацию:

function readRowsModify() 
{
  var spreadsheet = SpreadsheetApp.getActive();
  var ttl = spreadsheet.getSheets().length;
  for (var a=0; a<ttl; a++)
  {
    var sheet = spreadsheet.getSheets()[a];
    var rows = sheet.getDataRange();
    var numRows = rows.getNumRows();
    var values = rows.getValues();
    //if row 1 is header change i>0 to i>1
    for (var i = numRows; i>0; i--) 
    {
        var row = values[i-1];
        //if in this row, column c is 0 or column c is '' or column c is undifined, 
        //please correct define in this filter to delete row
        if (row[2] == 0 || row[2] == '' || row[2] == undefined) 
        {
           sheet.deleteRow(i);
        }
    }
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...