Как мне удалить пустые столбцы с заголовком в гугл листе? - PullRequest
2 голосов
/ 10 января 2020

У меня есть код ниже, который помогает мне удалить все пустые столбцы в правом конце. Но у меня также есть пустые столбцы между листом, и все эти пустые столбцы с заголовками.

Я хочу удалить пустые столбцы с заголовком, может кто-нибудь помочь мне в этом.

function removeEmptyColumns() {
   var ss = SpreadsheetApp.getActive();
   var allsheets = ss.getSheets();
   for (var s in allsheets){
      var sheet=allsheets[s]
      var maxColumns = sheet.getMaxColumns(); 
      var lastColumn = sheet.getLastColumn();
      if (maxColumns-lastColumn != 1){
         sheet.deleteColumns(lastColumn+2, maxColumns-lastColumn);
      }
   }
}

Ответы [ 2 ]

1 голос
/ 10 января 2020

Я рекомендую вам перебирать свои таблицы, искать записанные значения в каждом столбце, избегая строки заголовка. Сценарий может иметь эту логику c:

  1. Получить все данные каждого листа с помощью getDataRange и getValues ​​. Это создаст 2D-массив, который логически представлен в виде матрицы:

enter image description here

Сделайте два for цикла до итерируйте по массиву , сгенерированному на шаге 1. Создайте условие , чтобы проверить, есть ли ячейка со значением отличный от "", если это так, не удаляйте столбец.

Я также предлагаю вам сделать Quickstart , чтобы изучить основы таблиц и скриптов приложений.

0 голосов
/ 11 января 2020

Вот образец как ваш запрос

function UntitledMacro() {
  var spreadsheet = SpreadsheetApp.getActive();
  Logger.log("1");
   var allsheets = spreadsheet.getSheets();
   //In this sample I just to check 1 sheet only
   //so temporarily the for loop is commented, and column header is in row 1
   //and will delete all header without data and all column without header
   for (var sht in allsheets){
      var sheet=spreadsheet.getSheetByName(allsheets[shtNo].getSheetName());
      Logger.log("2");
      var maxColumns = sheet.getMaxColumns(); 
      var lastColumn = sheet.getLastColumn();
      var lastrow = sheet.getLastRow();
      if (maxColumns-lastColumn != 0){
         if (maxColumns>lastColumn)
         {
           Logger.log("3");
           sheet.deleteColumns(lastColumn+1, maxColumns-lastColumn);
         }
         for (a=0; a<lastColumn; a++)
         {
           var lstRange1 = sheet.getRange(1,lastColumn - a );
           if (lstRange1.getValue()=='') 
           {
             sheet.deleteColumns(lastColumn - a +1);
           }
           else
           {
             var lstRange2= sheet.getRange(lastrow, lastColumn - a );
             if (lstRange2.getValue()=='')
             {
               var rsltRange=lstRange2.getNextDataCell(SpreadsheetApp.Direction.UP);
               if (rsltRange.getRow()==1) sheet.deleteColumns(lastColumn - a +1,1);
             }
           }
         } 

      }

   }
};

Обновление:

function UntitledMacro3() {
   var spreadsheet = SpreadsheetApp.getActive();
   var allsheets = spreadsheet.getSheets();

   for (var shtNo in allsheets){
      var sheet=spreadsheet.getSheetByName(allsheets[shtNo].getSheetName());
      var maxColumns = sheet.getMaxColumns(); 
      var lastColumn = sheet.getLastColumn();
      var lastrow = sheet.getLastRow();
      if (maxColumns-lastColumn != 0){
         if (maxColumns>lastColumn)
         {
           sheet.deleteColumns(lastColumn+1, maxColumns-lastColumn);
         }
      }
      if (lastColumn>0)
      {
         for (a=0; a<lastColumn; a++)
         {
          var lstRange1 = sheet.getRange(1,lastColumn - a );
           if (lstRange1.getValue()=='') 
           {
             sheet.deleteColumns(lastColumn - a );
           }
           else
           {
             var lstRange2= sheet.getRange(lastrow, lastColumn - a );
             if (lstRange2.getValue()=='')
             {
               var rsltRange=lstRange2.getNextDataCell(SpreadsheetApp.Direction.UP);
               if (rsltRange.getRow()==1 && (lastColumn - a )<=maxColumns) sheet.deleteColumns(lastColumn - a ,1);
             }
           }
         } 

      }

   }
};

Теперь для всех листов. Запустите скрипт, затем после окончания sh, пожалуйста, нажмите Ctrl + Enter, чтобы показать журнал, пожалуйста, сообщите содержимое журнала

до:

enter image description here

pict После:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...