/** * Creates a new sheet using the sheets advanced services * @param {string} title the name of the sheet to be created * @returns {string} the spreadsheet ID */Snippets.prototype.create=(title)=>{// This code uses the Sheets Advanced Service, but for most use cases// the built-in method SpreadsheetApp.create() is more appropriate.try{letsheet=Sheets.newSpreadsheet();sheet.properties=Sheets.newSpreadsheetProperties();sheet.properties.title=title;constspreadsheet=Sheets.Spreadsheets.create(sheet);returnspreadsheet.spreadsheetId;}catch(err){// TODO (developer) - Handle exceptionconsole.log('Failed with error %s',err.message);}};
importcom.google.api.client.http.HttpRequestInitializer;importcom.google.api.client.http.javanet.NetHttpTransport;importcom.google.api.client.json.gson.GsonFactory;importcom.google.api.services.sheets.v4.Sheets;importcom.google.api.services.sheets.v4.SheetsScopes;importcom.google.api.services.sheets.v4.model.Spreadsheet;importcom.google.api.services.sheets.v4.model.SpreadsheetProperties;importcom.google.auth.http.HttpCredentialsAdapter;importcom.google.auth.oauth2.GoogleCredentials;importjava.io.IOException;importjava.util.Collections;/* Class to demonstrate the use of Spreadsheet Create API */publicclassCreate{/** * Create a new spreadsheet. * * @param title - the name of the sheet to be created. * @return newly created spreadsheet id * @throws IOException - if credentials file not found. */publicstaticStringcreateSpreadsheet(Stringtitle)throwsIOException{/* Load pre-authorized user credentials from the environment. TODO(developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for your application. */GoogleCredentialscredentials=GoogleCredentials.getApplicationDefault().createScoped(Collections.singleton(SheetsScopes.SPREADSHEETS));HttpRequestInitializerrequestInitializer=newHttpCredentialsAdapter(credentials);// Create the sheets API clientSheetsservice=newSheets.Builder(newNetHttpTransport(),GsonFactory.getDefaultInstance(),requestInitializer).setApplicationName("Sheets samples").build();// Create new spreadsheet with a titleSpreadsheetspreadsheet=newSpreadsheet().setProperties(newSpreadsheetProperties().setTitle(title));spreadsheet=service.spreadsheets().create(spreadsheet).setFields("spreadsheetId").execute();// Prints the new spreadsheet idSystem.out.println("Spreadsheet ID: "+spreadsheet.getSpreadsheetId());returnspreadsheet.getSpreadsheetId();}}
/** * Create a google spreadsheet * @param {string} title Spreadsheets title * @return {string} Created spreadsheets ID */asyncfunctioncreate(title){const{GoogleAuth}=require('google-auth-library');const{google}=require('googleapis');constauth=newGoogleAuth({scopes:'https://www.googleapis.com/auth/spreadsheets',});constservice=google.sheets({version:'v4',auth});constresource={properties:{title,},};try{constspreadsheet=awaitservice.spreadsheets.create({resource,fields:'spreadsheetId',});console.log(`Spreadsheet ID: ${spreadsheet.data.spreadsheetId}`);returnspreadsheet.data.spreadsheetId;}catch(err){// TODO (developer) - Handle exceptionthrowerr;}}
importgoogle.authfromgoogleapiclient.discoveryimportbuildfromgoogleapiclient.errorsimportHttpErrordefcreate(title):""" Creates the Sheet the user has access to. Load pre-authorized user credentials from the environment. TODO(developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for the application. """creds,_=google.auth.default()# pylint: disable=maybe-no-membertry:service=build("sheets","v4",credentials=creds)spreadsheet={"properties":{"title":title}}spreadsheet=(service.spreadsheets().create(body=spreadsheet,fields="spreadsheetId").execute())print(f"Spreadsheet ID: {(spreadsheet.get('spreadsheetId'))}")returnspreadsheet.get("spreadsheetId")exceptHttpErroraserror:print(f"An error occurred: {error}")returnerrorif__name__=="__main__":# Pass: titlecreate("mysheet1")
There’s no option to create a spreadsheet directly within a specified Drive folder using the Sheets API. By default, the created spreadsheet is saved to the user’s root folder on Drive.
However, there are 2 alternatives to saving a file to a Drive folder:
After the spreadsheet is created, move it to a specific folder using the files.update method of the Drive API. For more information on moving files, refer to Move files between folders.
Add a blank spreadsheet to a folder using the files.create method of the Drive API, specifying application/vnd.google-apps.spreadsheet as the mimeType. For more information on creating files, refer to Create a file in a folder.
For either alternative, you'll need to add the appropriate Drive
API scopes to authorize the call.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-04 UTC."],[],[],null,["This page describes how to create a spreadsheet.\n\nExample\n\nTo create a spreadsheet, use the [create](/workspace/sheets/api/reference/rest/v4/spreadsheets/create)\nmethod on the [spreadsheets](/workspace/sheets/api/reference/rest/v4/spreadsheets) collection, as shown in the following example.\n\nThis example creates a blank spreadsheet with a specified title. \n\nApps Script \nsheets/api/spreadsheet_snippets.gs \n[View on GitHub](https://github.com/googleworkspace/apps-script-samples/blob/main/sheets/api/spreadsheet_snippets.gs) \n\n```gosu\n/**\n * Creates a new sheet using the sheets advanced services\n * @param {string} title the name of the sheet to be created\n * @returns {string} the spreadsheet ID\n */\nSnippets.prototype.create = (title) =\u003e {\n // This code uses the Sheets Advanced Service, but for most use cases\n // the built-in method SpreadsheetApp.create() is more appropriate.\n try {\n let sheet = Sheets.newSpreadsheet();\n sheet.properties = Sheets.newSpreadsheetProperties();\n sheet.properties.title = title;\n const spreadsheet = Sheets.Spreadsheets.create(sheet);\n\n return spreadsheet.spreadsheetId;\n } catch (err) {\n // TODO (developer) - Handle exception\n console.log('Failed with error %s', err.message);\n }\n};\n```\n\nJava \nsheets/snippets/src/main/java/Create.java \n[View on GitHub](https://github.com/googleworkspace/java-samples/blob/main/sheets/snippets/src/main/java/Create.java) \n\n```java\nimport com.google.api.client.http.HttpRequestInitializer;\nimport com.google.api.client.http.javanet.NetHttpTransport;\nimport com.google.api.client.json.gson.GsonFactory;\nimport com.google.api.services.sheets.v4.Sheets;\nimport com.google.api.services.sheets.v4.SheetsScopes;\nimport com.google.api.services.sheets.v4.model.Spreadsheet;\nimport com.google.api.services.sheets.v4.model.SpreadsheetProperties;\nimport com.google.auth.http.HttpCredentialsAdapter;\nimport com.google.auth.oauth2.GoogleCredentials;\nimport java.io.IOException;\nimport java.util.Collections;\n\n/* Class to demonstrate the use of Spreadsheet Create API */\npublic class Create {\n /**\n * Create a new spreadsheet.\n *\n * @param title - the name of the sheet to be created.\n * @return newly created spreadsheet id\n * @throws IOException - if credentials file not found.\n */\n public static String createSpreadsheet(String title) throws IOException {\n /* Load pre-authorized user credentials from the environment.\n TODO(developer) - See https://developers.google.com/identity for\n guides on implementing OAuth2 for your application. */\n GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()\n .createScoped(Collections.singleton(SheetsScopes.SPREADSHEETS));\n HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(\n credentials);\n\n // Create the sheets API client\n Sheets service = new Sheets.Builder(new NetHttpTransport(),\n GsonFactory.getDefaultInstance(),\n requestInitializer)\n .setApplicationName(\"Sheets samples\")\n .build();\n\n // Create new spreadsheet with a title\n Spreadsheet spreadsheet = new Spreadsheet()\n .setProperties(new SpreadsheetProperties()\n .setTitle(title));\n spreadsheet = service.spreadsheets().create(spreadsheet)\n .setFields(\"spreadsheetId\")\n .execute();\n // Prints the new spreadsheet id\n System.out.println(\"Spreadsheet ID: \" + spreadsheet.getSpreadsheetId());\n return spreadsheet.getSpreadsheetId();\n }\n}\n```\n\nJavaScript \nsheets/snippets/sheets_create.js \n[View on GitHub](https://github.com/googleworkspace/browser-samples/blob/main/sheets/snippets/sheets_create.js) \n\n```javascript\nfunction create(title, callback) {\n try {\n gapi.client.sheets.spreadsheets.create({\n properties: {\n title: title,\n },\n }).then((response) =\u003e {\n if (callback) callback(response);\n console.log('Spreadsheet ID: ' + response.result.spreadsheetId);\n });\n } catch (err) {\n document.getElementById('content').innerText = err.message;\n return;\n }\n}\n```\n\nNode.js \nsheets/snippets/sheets_create.js \n[View on GitHub](https://github.com/googleworkspace/node-samples/blob/main/sheets/snippets/sheets_create.js) \n\n```javascript\n/**\n * Create a google spreadsheet\n * @param {string} title Spreadsheets title\n * @return {string} Created spreadsheets ID\n */\nasync function create(title) {\n const {GoogleAuth} = require('google-auth-library');\n const {google} = require('googleapis');\n\n const auth = new GoogleAuth({\n scopes: 'https://www.googleapis.com/auth/spreadsheets',\n });\n\n const service = google.sheets({version: 'v4', auth});\n const resource = {\n properties: {\n title,\n },\n };\n try {\n const spreadsheet = await service.spreadsheets.create({\n resource,\n fields: 'spreadsheetId',\n });\n console.log(`Spreadsheet ID: ${spreadsheet.data.spreadsheetId}`);\n return spreadsheet.data.spreadsheetId;\n } catch (err) {\n // TODO (developer) - Handle exception\n throw err;\n }\n}\n```\n\nPHP \nsheets/snippets/src/SpreadsheetCreate.php \n[View on GitHub](https://github.com/googleworkspace/php-samples/blob/main/sheets/snippets/src/SpreadsheetCreate.php) \n\n```php\nuse Google\\Client;\nuse Google\\Service\\Drive;\nuse Google\\Service\\Sheets\\SpreadSheet;\n\n/**\n* create an empty spreadsheet\n* \n*/\n\n function create($title)\n { \n /* Load pre-authorized user credentials from the environment.\n TODO(developer) - See https://developers.google.com/identity for\n guides on implementing OAuth2 for your application. */\n $client = new Google\\Client();\n $client-\u003euseApplicationDefaultCredentials();\n $client-\u003eaddScope(Google\\Service\\Drive::DRIVE);\n $service = new Google_Service_Sheets($client);\n try{\n\n $spreadsheet = new Google_Service_Sheets_Spreadsheet([\n 'properties' =\u003e [\n 'title' =\u003e $title\n ]\n ]);\n $spreadsheet = $service-\u003espreadsheets-\u003ecreate($spreadsheet, [\n 'fields' =\u003e 'spreadsheetId'\n ]);\n printf(\"Spreadsheet ID: %s\\n\", $spreadsheet-\u003espreadsheetId);\n return $spreadsheet-\u003espreadsheetId;\n }\n catch(Exception $e) {\n // TODO(developer) - handle error appropriately\n echo 'Message: ' .$e-\u003egetMessage();\n }\n }\n```\n\nPython \nsheets/snippets/sheets_create.py \n[View on GitHub](https://github.com/googleworkspace/python-samples/blob/main/sheets/snippets/sheets_create.py) \n\n```python\nimport google.auth\nfrom googleapiclient.discovery import build\nfrom googleapiclient.errors import HttpError\n\n\ndef create(title):\n \"\"\"\n Creates the Sheet the user has access to.\n Load pre-authorized user credentials from the environment.\n TODO(developer) - See https://developers.google.com/identity\n for guides on implementing OAuth2 for the application.\n \"\"\"\n creds, _ = google.auth.default()\n # pylint: disable=maybe-no-member\n try:\n service = build(\"sheets\", \"v4\", credentials=creds)\n spreadsheet = {\"properties\": {\"title\": title}}\n spreadsheet = (\n service.spreadsheets()\n .create(body=spreadsheet, fields=\"spreadsheetId\")\n .execute()\n )\n print(f\"Spreadsheet ID: {(spreadsheet.get('spreadsheetId'))}\")\n return spreadsheet.get(\"spreadsheetId\")\n except HttpError as error:\n print(f\"An error occurred: {error}\")\n return error\n\n\nif __name__ == \"__main__\":\n # Pass: title\n create(\"mysheet1\")\n```\n\nRuby \nsheets/snippets/lib/spreadsheet_snippets.rb \n[View on GitHub](https://github.com/googleworkspace/ruby-samples/blob/main/sheets/snippets/lib/spreadsheet_snippets.rb) \n\n```ruby\nspreadsheet = {\n properties: {\n title: 'Sales Report'\n }\n}\nspreadsheet = service.create_spreadsheet(spreadsheet,\n fields: 'spreadsheetId')\nputs \"Spreadsheet ID: #{spreadsheet.spreadsheet_id}\"\n```\n\nWork with Google Drive folders\n\nThere's no option to create a spreadsheet directly within a specified Drive folder using the Sheets API. By default, the created spreadsheet is saved to the user's root folder on Drive.\n\nHowever, there are 2 alternatives to saving a file to a Drive folder:\n\n- After the spreadsheet is created, move it to a specific folder using the [files.update](/drive/api/v3/reference/files/update) method of the Drive API. For more information on moving files, refer to [Move files between folders](/drive/api/guides/folder#move_files_between_folders).\n- Add a blank spreadsheet to a folder using the [files.create](/drive/v3/reference/files/create) method of the Drive API, specifying `application/vnd.google-apps.spreadsheet` as the `mimeType`. For more information on creating files, refer to [Create a file in a folder](/drive/api/guides/folder#create_a_file_in_a_folder).\n\nFor either alternative, you'll need to add the appropriate [Drive\nAPI scopes](/drive/api/v3/reference/files/create#auth) to authorize the call.\n\nTo move or create a file within a shared drive folder, refer to [Implement shared drive support](/drive/api/guides/enable-shareddrives).\n\nTo learn more about cell and row limits in Google Sheets, see [Files you can store in Google Drive](https://support.google.com/drive/answer/37603)."]]