Как я могу применить скрипт только к одному конкретному листу в электронной таблице?

9

У меня есть таблица с двумя листами , называемых Robinи Lucy. Я создал / нашел / исказил скрипт для сортировки данных на листе каждый раз, когда добавляю некоторые данные в столбец A:

function onEdit(event){

  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 1;
  var tableRange = "a2:I30";
    if(editedCell.getColumn() == columnToSortBy){   
   var range = sheet.getRange(tableRange);
   range.sort( { column : columnToSortBy } );
  }
}

Этот скрипт работает хорошо, но я только хочу, чтобы он был применен на первом листе Robin. Данные на втором листе Lucyне совпадают, поэтому я собираюсь создать другой сценарий для другого диапазона для этого, как только решу эту проблему.

Я думаю, что мне нужно использовать, getSheetByName("Robin")но я не могу заставить его работать.

oohrogerplamer
источник

Ответы:

12

Есть несколько способов сделать это. Во-первых, вам нужно объявить электронную таблицу:

var ss = SpreadsheetApp.getActiveSpreadsheet();  

Во-вторых, объявите первый лист так:

var sh0 = ss.getSheets()[0];

или вот так:

var sh0 = ss.getSheetByName("Robin");

Затем установите активную ячейку и получите индекс столбца:

var editedCell = sh0.getActiveRange().getColumnIndex();

И сделайте логику для сортировки:

var columnToSortBy = 1;
var tableRange = "a2:I30";

if(editedCell == columnToSortBy){   
  var range = sheet.getRange(tableRange);
  range.sort( { column : columnToSortBy } );
}

Полный код, немного укороченный:

function onEdit(){
  var sh0 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  var editedCell = sh0.getActiveRange().getColumnIndex();

  if(editedCell == 1) { 
    var range = sh0.getRange("A2:I30");
    range.sort({column: 1});
  }
}
Джейкоб Ян Туинстра
источник
@oohrogerplamer Вы можете принять ответ, пометив его, посмотреть Часто задаваемые вопросы области. Пожалуйста.
Джейкоб Ян Туинстра
Как я могу сделать это для сортировки по столбцу, но так же, как и для других столбцов, чтобы все данные по-прежнему совпадали в строках?
moobot
1

Получите связанный лист (электронную таблицу) и укажите, на какую вкладку (лист) вы хотите сфокусироваться:

var theSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Robin");
// do the thing
var theSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Lucy"); 
// do the other thing

Ссылка: https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getSheetByName(String)

Энди Робертс
источник