I am attempting to run a script that will copy info from multiple different sheets to a different file. I am having issues with the forEach
function. The error I am getting is:
Error
ReferenceError: sheets is not defined
copy @ Code.gs:9
copyInfo @ 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); }
Advertisement
Answer
If you create a function to use with forEach, that function needs to accept an individual item as a parameter. In this case, each “sheet” from SpreadsheetApp.getActive().getSheets() will be passed as the first parameter into your copy function – but the copy function doesn’t accept any params as is.
function copy(sheet) { var sheetName = sheet.getName(); if(sheetName.includes("*")) ... }