Ethan
Ethan

Reputation: 11

Google Sheets Script Error - Cannot convert [object Object] to Spreadsheet

I'm trying to create a script that creates a new spreadsheet in my Google drive, and then merges the sheets from a specific Google drive folder into the newly created spreadsheet.

As of right now I'm getting the following error: Cannot convert [object Object] to Spreadsheet. (line 34, file "Code")

I've copied the code below.

 function mergeSheets() {

  /* Retrieve the desired folder */
  var myFolder = DriveApp.getFoldersByName("Merging Spreadsheet Test Folder").next();

  /* Get all spreadsheets that resided on that folder */
  var spreadSheets = myFolder.getFilesByType("application/vnd.google-apps.spreadsheet");


var newSpreadSheet = {
    "title": "Test Merge Document",
    "mimeType": "application/vnd.google-apps.document",
    "parents": [
      {
       "id": "0B4DgXVz2cL8oRURkdUNCZEhITG8"
      }
    ]
  };

    Drive.Files.insert(newSpreadSheet);

  /* Iterate over the spreadsheets over the folder */
  while(spreadSheets.hasNext()) {

    var sheet = spreadSheets.next();

    /* Open the spreadsheet */
    var spreadSheet = SpreadsheetApp.openById(sheet.getId());

    /* Get all its sheets */
    for(var y in spreadSheet.getSheets()) {

      /* Copy the sheet to the new merged Spread Sheet */
      spreadSheet.getSheets()[y].copyTo(newSpreadSheet); 
    }
  }      
 }     

Any help would be greatly appreciated.

Upvotes: 1

Views: 1056

Answers (2)

Ethan
Ethan

Reputation: 11

Here is the solution I ended up using. Works like a charm.

 function mergeSheets() {

 /* Retrieve the desired folder */
 var myFolder = DriveApp.getFoldersByName("Enter Folder Name Here").next();

 /* Get all spreadsheets that resided on that folder */
 var spreadSheets = myFolder.getFilesByType("application/vnd.google-apps.spreadsheet");    

 /* Creates new spreadsheet to merge documents into */
var newSpreadSheet = SpreadsheetApp.create("Enter Name For New Spreadsheet Here");

/* Iterate over the spreadsheets over the folder */
while(spreadSheets.hasNext()) {
var sheet = spreadSheets.next();

/* Grabs name of the document */    
var ssName = sheet.getName();
Logger.log(ssName)

/* Open the spreadsheet */
var spreadSheet = SpreadsheetApp.openById(sheet.getId());

/* Get all its sheets */
for(var y in spreadSheet.getSheets()) {

      /* Copy the sheet to the new merged Spread Sheet */
      spreadSheet.getSheets()[y].copyTo(newSpreadSheet).setName(ssName);
    }

  }      
 }  

Upvotes: 0

Spencer Easton
Spencer Easton

Reputation: 5782

You are trying to save a sheet to an object not a Spreadsheet. There are two ways to fix this.

You can create the spreadsheet with:

var newSpreadSheet = SpreadsheetApp.create("Test Merge Document");

or open the sheet after you make it:

var newSpreadSheet = {
    "title": "Test Merge Document",
    "mimeType": "application/vnd.google-apps.document",
    "parents": [
      {
       "id": "0B4DgXVz2cL8oRURkdUNCZEhITG8"
      }
    ]
  };

var newSS =  Drive.Files.insert(newSpreadSheet),
    newSpreadSheet = SpreadsheetApp.openById(newSS.id);

Upvotes: 0

Related Questions