Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Sheets API: Create or move Spreadsheet into Folder

Tags:

Is it possible to create a Spreadsheet in a specified Folder or do I have to use the Drive API to move it afterwards?

like image 488
Hans Bickhofe Avatar asked Mar 21 '17 22:03

Hans Bickhofe


People also ask

How do I move a spreadsheet in Google Sheets?

To move a sheet:Click and drag the tab of the sheet you want to move. Release the mouse to place the tab at the desired location.


2 Answers

Use the drive API to create an empty sheet and open it using the sheets api:

function getClient() {     $client = new \Google_Client();      putenv(         'GOOGLE_APPLICATION_CREDENTIALS='.__DIR__."/config/google-creds.json"     );     $client = new \Google_Client();     $client->setScopes(         [             \Google_Service_Drive::DRIVE,             \Google_Service_Storage::CLOUD_PLATFORM,             'https://www.googleapis.com/auth/spreadsheets',         ]     );     $client->useApplicationDefaultCredentials();      return $client; }  // Get the API client and construct the service object. $client = getClient(); $service = new Google_Service_Drive($client);  $ROOT_FOLDER_ID='you-must-set-this-to-your-folder-id'; // create the empty sheet:  $googleServiceDriveDriveFile = new \Google_Service_Drive_DriveFile(); $googleServiceDriveDriveFile->setMimeType(     'application/vnd.google-apps.spreadsheet')     ; $googleServiceDriveDriveFile->setName('Test'); $googleServiceDriveDriveFile->setParents([$ROOT_FOLDER_ID]); $res  = $service->files->create($googleServiceDriveDriveFile);  // print the id of the file we just made print 'Created file with id : ' . $res->getId() . "\n";  // Print the names and IDs for up to 10 files. $optParams = array(     'pageSize' => 10,     'fields'   => 'nextPageToken, files(id, name)',     'q' => "'$ROOT_FOLDER_ID' in parents" );  $results = $service->files->listFiles($optParams);  if (count($results->getFiles()) == 0) {     print "No files found.\n"; } else {     print "Files:\n";     foreach ($results->getFiles() as $file) {         printf("%s (%s)\n", $file->getName(), $file->getId());     } } // fetch the sheet you created and edit it. $service = new Google_Service_Sheets($client); $sheet = $service->spreadsheets->get($res->getId());  print "Fetched sheet with name: " . $sheet->getSpreadsheetUrl() . "\n"; 
like image 176
Tarjei Huse Avatar answered Sep 20 '22 14:09

Tarjei Huse


I'm a little late but the way I found doesn't require copying/deleting the file. You simply remove and add parents. My code is in Ruby instead of JS but I'm sure something similar exists.

file = service.get_file(file_id,fields: 'parents') service.update_file(   file_id,   file   remove_parents: file.parents,    add_parents: new_folder_id,   fields: 'id,parents' ) 

After a few minutes of searching the drive api docs, I found the code below for Node.JS to move a file into a specific folder. Hope this helps.

fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ' folderId = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E' // Retrieve the existing parents to remove drive.files.get({   fileId: fileId,   fields: 'parents' }, function(err, file) {   if (err) {     // Handle error     console.log(err);   } else {     // Move the file to the new folder     var previousParents = file.parents.join(',');     drive.files.update({       fileId: fileId,       addParents: folderId,       removeParents: previousParents,       fields: 'id, parents'     }, function(err, file) {       if(err) {         // Handle error       } else {         // File moved.       }     });   } }); 
like image 23
M. Wyatt Avatar answered Sep 20 '22 14:09

M. Wyatt