ForEach функция для нескольких листов в Google Scripts

Я пытаюсь запустить скрипт, который будет копировать информацию с нескольких разных листов в другой файл. У меня проблемы с функцией forEach. Ошибка, которую я получаю:

Ошибка
ReferenceError: листы не определены копировать @ Code.gs:9 копиинфо @ Code.gs:4

function copyInfo() {
  var sheets = SpreadsheetApp.getActive().getSheets(); // get all sheets
  sheets.forEach(copy)
}


function copy() {
      var sheetName = sheets.getActiveSheet.getName();
      if (sheetName.includes("*"))
        var copySheet = SpreadsheetApp.getActiveSheet();
        var sheetName=copySheet.getName();
        var pasteSpreadsheet = SpreadsheetApp.openById("1NXmdq6yCKC6oiDAQNXcovj85697__rCeVJiIT_ou_gI");

  //Create new sheet if one doesn't exist
  var newSheet = pasteSpreadsheet.getSheetByName(sheetName);   
  
  if (newSheet != null) 
    pasteSpreadsheet.deleteSheet(newSheet);
    newSheet = pasteSpreadsheet.insertSheet();
    newSheet.setName(sheetName);

  //Copy and paste data
  
  // Clear the Google Sheet before copy
  newSheet.clear({contentsOnly: true});

  // get source range
  var source = copySheet.getRange("B2:B");
  var values = source.getValues();
  // get destination range
  var destination = newSheet.getRange(1,1,values.length,values[0].length);
   // copy values to destination range
  destination.setValues(values);
  }
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
43
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если вы создаете функцию для использования с forEach, эта функция должна принимать отдельный элемент в качестве параметра. В этом случае каждый «лист» из SpreadsheetApp.getActive().getSheets() будет передан в качестве первого параметра в вашу функцию копирования, но функция копирования не принимает никаких параметров как есть.

function copy(sheet) {
      var sheetName = sheet.getName();
      if (sheetName.includes("*"))
      ...
}

Я понимаю ошибку, которую я сделал, но я исправил ее, и я получаю "TypeError: Cannot read property 'getName' of undefined"

Sam Slivinski 05.05.2022 23:07

Ну... я понял. Конечно, это был просто синтаксис. Спасибо за ваш ответ!

Sam Slivinski 06.05.2022 16:33

Это может сработать

function copyInfo() {
  const dontcopy = ["Sh1","Sh2",...];
  var sheets = SpreadsheetApp.getActive().getSheets(); // get all sheets
  sheets.filter(sh => !~dontcopy.indexOf(sh.getName()).forEach(s => {
    s.activate();
    copy();
  });
}

Есть определенные листы, которые нельзя скопировать, и мне нужны только выбранные столбцы из листов, которые я копирую. Спасибо за ваш ответ

Sam Slivinski 05.05.2022 22:59

Таким образом, вы можете использовать фильтр, чтобы отфильтровать их

Cooper 05.05.2022 23:01

Другие вопросы по теме