Удалить столбцы Google Sheets на основе имени столбца - PullRequest
1 голос
/ 08 октября 2019

У меня есть Google Sheet из системного экспорта. Я хочу удалить определенные столбцы на основе имени. Столбцы не расположены рядом друг с другом.

Чтобы удалить все вместе, я хочу получить getRange, где переменная диапазона имеет определенные имена заголовков.

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

РЕДАКТИРОВАТЬ: я не могу использовать стандартный метод deleteColumn, так как порядок столбцов отличается день ото дня.

function deleteColumns() {

  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('data'), true);
  spreadsheet.getRange('1:1').activate();
  var header = spreadsheet.getRange('1:1');
  var deleteValues = (header.getValues());
 var counter = 1;

  for (i=0; i<header.length; i++) {
     if
        (
        ( deleteValues[i] == 'example A') ||
        ( deleteValues[i] == 'example B') ||
        ( deleteValues[i] == 'example C') ||
        ( deleteValues[i] == 'example D') ||
        ( deleteValues[i] == 'example E')
        )
        {
          spreadsheet.deleteColumn(counter); }
    else {
      var counter = counter + 1;
    }
        }}

1 Ответ

1 голос
/ 08 октября 2019

Вы можете удалить столбец, используя метод deleteColumn ( column_position ) :

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
// Columns start at "1" - this deletes the first column
sheet.deleteColumn(1);

https://developers.google.com/apps-script/reference/spreadsheet/sheet#deletecolumncolumnposition

В вашей ситуацииподход, должен получить диапазон строк, где есть имена столбцов и с циклом for и счетчиком (который начинается с 1 и который увеличивается на 1 для каждой проверки). Таким образом, если значение ячейки совпадает с тем, которое вы определили, индексом столбца является значение счетчика. То есть:

counter = 1;
for (i=0; i<range.length; i++) {
    if (deleteValues[i] == 'exampleA' ||
       deleteValues[i] == 'exampleB' ||
       deleteValues[i] == 'exampleC' ||
       deleteValues[i] == 'exampleD') {
           sheet.deleteColumn(counter);
    } else {
       counter = counter + 1;
    }
} 

РЕДАКТИРОВАТЬ : в дополнение к некоторым концептуальным проблемам ваш код должен был быть изменен в других местах, чтобы работать. Вот рабочий код:

function deleteColumns() {

  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Foglio2'), true);
  spreadsheet.getRange('1:1').activate();
  var header = spreadsheet.getRange('1:1');
  var deleteValues = (header.getValues());
  var counter = 1;

  for (i=0; i<deleteValues[0].length; i++) {
    if
      (
         deleteValues[0][i] == 'exampleA' ||
         deleteValues[0][i] == 'exampleB' ||
         deleteValues[0][i] == 'exampleC' ||
           deleteValues[0][i] == 'exampleD'
          )
          {
            spreadsheet.deleteColumn(counter); }
    else {
      counter = counter + 1;
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...