8

I have an .xls file stored in Google Drive. I want to convert it to the Google Sheets spreadsheet file format from Google Apps Script. Is there any way to do this without external solutions?

abielita
  • 13,147
  • 2
  • 17
  • 59
Buravchik
  • 509
  • 1
  • 5
  • 11

4 Answers4

8

This is now possible using the Advanced Drive service:

https://developers.google.com/apps-script/advanced/drive

When using Drive.Files.insert, simply set the optional parameter "convert" to "true".

var file = {
    title: 'Converted Spreadsheet'
  };
  file = Drive.Files.insert(file, xlsxBlob, {
    convert: true
  });

This was also obtained from the above given issue

Riyafa Abdul Hameed
  • 7,417
  • 6
  • 40
  • 55
3

Other than using the delivered 'upload' and convert functions, it's not currently available. Requesting enhancement request here: http://code.google.com/p/google-apps-script-issues/issues/detail?id=1019

mzimmerman
  • 910
  • 6
  • 13
Joe Foley
  • 168
  • 12
2

Here's the complete code to create a file in a particular folder: (was a hint but was not completely apparent to me from @ben-visness comment)

var file = { 
    "title": filename, 
    "parents": [{"id": folderId}]
};
file = Drive.Files.insert(file, blobObj, {
    "convert": true
});

Note: This will require enabling advanced Drive service from within Google Apps Script - Menu > Resources > Advanced Google Services AND Menu > Resources > Advanced Google Services > Google API Console.

1

Here's the code I used to convert an Excel file into a Google Sheets file, with the same name and in the same folder.

var excel = DriveApp.getFileById(...);

var resource = {
   title : excel.getName(),
   mimeType : MimeType.GOOGLE_SHEETS,
   parents: [{id : folder.getId()}],
}

Drive.Files.insert(resource, excel.getBlob());

In my case, I already had a folder object available which represented the folder I wanted to save the sheet to, but you could just as easily get the folder of the original file using excel.getParents().

You will also have to enable an Advanced Google Service called "Drive API" in order to use Drive.Files. Read more here.

Solution was originally derived from this article.

Max Stevens
  • 101
  • 1
  • 7