Как создать цикл Google Scripts для активации и копирования данных с каждой вкладки в рабочей книге - PullRequest
0 голосов
/ 06 июня 2019

У меня есть электронная таблица с количеством листов X (количество листов будет постоянно меняться).Формат данных на каждом листе одинаков.Я хочу создать макрос для активации каждого листа в электронной таблице и извлечения данных из определенных ячеек на новый лист (по сути, я объединяю информацию с каждого листа в одном месте).Я вижу, как активировать лист, используя getSheetByName(), но имя и количество листов будут регулярно меняться.Я надеялся создать цикл, который будет выполнять следующие действия:

  1. Активировать первый лист.
  2. Копировать данные из нескольких ячеек на этом листе в "Лист "Панель инструментов".
  3. Активируйте лист следующий .
  4. Скопируйте данные из нескольких ячеек на этом листе на лист "Панель инструментов".
  5. Повтордо все листы были рассмотрены.

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

  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A2').activate();
  var nextSheetIndex = spreadsheet.getActiveSheet().getIndex() + 1;
  if (nextSheetIndex > spreadsheet.getSheets().length) { nextSheetIndex = 1; }
  spreadsheet.setActiveSheet(spreadsheet.getSheets()[nextSheetIndex - 1], true);
  spreadsheet.getRange('A2').activate();
  nextSheetIndex = spreadsheet.getActiveSheet().getIndex() + 1;

Любые советы будут с благодарностью!

1 Ответ

0 голосов
/ 07 июня 2019

Прежде всего, вам не нужно активировать Sheet для внесения изменений. Поскольку вы хотите перебирать каждый Sheet в Spreadsheet, используйте метод getSheets(), чтобы получить Array из Sheet экземпляров.

Затем выполните итерацию по каждому Sheet с циклом по своему вкусу (for, for...in, forEach() и т. Д.) И во время каждой итерации цикла обращайтесь к значению Range, которое вы хотите извлеките данные с помощью getRange(yourRangeReference).getValue() и скопируйте их в место назначения Sheet.

Если вам нужно проверить и учесть количество динамически изменяющихся листов, , пока вы выполняете итерации по ним, getNumSheets() метод на каждом шаге итерации и, если его результат больше исходного, доступ и затем push() этот лист в Array.

Полезные ссылки

  1. документация MDN на for петле (самая простая);
  2. SpreadsheetApp ссылка для службы электронных таблиц;
  3. Руководство разработчика по расширению Google Sheets ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...