Is it possible to create a Spreadsheet in a specified Folder or do I have to use the Drive API to move it afterwards?
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.
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";
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. } }); } });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With