Yes. To create Google Calendar events from a Google Sheet, either export a properly formatted sheet as a CSV file and import it into Calendar, or use Google Apps Script to create events directly from rows. CSV is usually simplest for a one-time batch; a script is more useful when you need repeatable automation or want to set extra event details.
What happens when Sheets and Calendar work together?
Google Sheets does not have a built-in command that turns selected rows into Calendar events. A spreadsheet can hold event details, but you need to move those details into Calendar by importing a file, running a script, or using a third-party integration. That distinction matters: editing a cell does not automatically change an event unless you have set up a process that connects the two.
For occasional use, CSV import is a straightforward way to transfer a batch of appointments, classes, deadlines, or work shifts. For recurring workflows—such as adding new bookings every week—Apps Script can read the sheet and create events in a chosen Google Calendar. Both approaches can create actual Calendar events, but neither automatically maintains a live two-way link to the spreadsheet.
Choose between CSV import and Apps Script
- Choose CSV import when you have a finished list and want to import it once. It requires no code, but you must prepare the columns and import the file manually.
- Choose Apps Script when you want to create events from rows on demand, record which rows have been processed, or customize event descriptions and locations. It requires a small script and permission to access Calendar.
- Consider a third-party add-on if you need a guided interface or a maintained connection, but check its permissions, cost, and data-handling terms before granting access.
Excel is different: an Excel workbook does not use Google Sheets menus or Apps Script. You can still prepare a compatible CSV in Excel and import it into Google Calendar, or use another automation service. The instructions below are for Google Sheets in a web browser.
Prepare a Google Sheets table for import
For a CSV import, put one event on each row and use Calendar’s expected column headings. The required headings are Subject, Start Date, Start Time, End Date, and End Time. Optional headings include All Day Event, Description, Location, and Private. Keep the headings in English and use the same spelling shown here.
A simple timed-event sheet might look like this:
| Subject | Start Date | Start Time | End Date | End Time | Location | Description |
|---|---|---|---|---|---|---|
| Design review | 11/18/2026 | 10:00 AM | 11/18/2026 | 10:30 AM | Meeting room 2 | Review the draft |
Use dates and times that are unambiguous and verify how they appear in the cells before exporting. A spreadsheet may display a date in a regional format that differs from the format expected by an importer. If you are preparing the file for Calendar, a clear month/day/year date such as 11/18/2026 and a time such as 10:00 AM are a practical example. Check the imported event afterward, especially when the spreadsheet and Calendar use different regional or time-zone settings.
For an all-day event, include the All Day Event column and enter True for that row. Supply the start and end dates, but do not rely on a time of midnight to mean “all day.” Keep one header row at the top, remove blank rows within the data, and avoid merged cells. For a single CSV export, select the tab containing the event list; Google Sheets exports the current sheet tab rather than combining every tab in the workbook.
Export the sheet and import the events
- In Google Sheets, select the tab with the event data and check that every row has a subject and valid dates. Confirm the start time is before the end time for timed events.
- Choose File > Download > Comma Separated Values (.csv). The downloaded file represents the current sheet tab.
- Open Google Calendar in a web browser. Select the gear icon, choose Settings, then open Import & export.
- Under Import, choose the CSV file from your computer and select the destination calendar. Check this selection carefully if you use more than one calendar.
- Choose Import. Review Calendar’s result message, then inspect several events in the destination calendar to confirm the dates, times, titles, and details look right.
Importing adds events to the selected calendar; it does not establish a continuing connection to the Google Sheet. If you later fix a typo in the sheet, that edit will not automatically update the event. Make corrections in Calendar, or remove the imported events and import a corrected file. Before re-importing a full file, check whether the earlier batch is still present: importing the same data again can create duplicate events.
Create events directly with Apps Script
Apps Script is Google’s scripting environment for automating Google Workspace tasks. A simple setup uses one row per event, with columns for title, start date and time, end date and time, location, description, and a status. In the sheet, enter actual date-and-time values in the start and end columns rather than text that only looks like a date. The script below uses the default calendar for the account running it and marks successfully processed rows as Created.
To add it, open the spreadsheet and choose Extensions > Apps Script. Replace the starter code with the script, save it, and run createCalendarEvents. The first run asks you to authorize access. Review the requested permissions and only continue if you trust the script and understand that it will create events in your default calendar.
function createCalendarEvents() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Events');
if (!sheet) throw new Error('Create a sheet tab named Events.');
const rows = sheet.getDataRange().getValues();
const calendar = CalendarApp.getDefaultCalendar();
// Columns A-F: title, start, end, location, description, status.
for (let i = 1; i < rows.length; i++) {
const [title, start, end, location, description, status] = rows[i];
const rowNumber = i + 1;
if (!title || status === 'Created') continue;
if (!(start instanceof Date) || !(end instanceof Date) || end <= start) {
sheet.getRange(rowNumber, 6).setValue('Check dates and times');
continue;
}
const event = calendar.createEvent(String(title), start, end, {
location: location ? String(location) : '',
description: description ? String(description) : ''
});
sheet.getRange(rowNumber, 6).setValue('Created');
sheet.getRange(rowNumber, 7).setValue(event.getId());
}
}
Create a tab named Events. Put the column headings in row 1 in this order: title, start, end, location, description, status, and event ID. The script skips row 1, skips rows without a title, and skips rows already marked Created. It checks that start and end are date values and that the end comes after the start. A row that fails that check receives a status message instead of an event. The event ID is written in column G for reference; it is not used by this basic script to update or delete events.
This is a starting point, not a full synchronization system. If the script creates an event but fails before writing the status, running it again could create a duplicate. Review the sheet and calendar after a run, and avoid changing a processed row expecting the existing event to update. A more complete workflow would store event IDs and deliberately update or delete matching events, with safeguards for errors and duplicates.
Dates, time zones, and event behavior
Time-zone mismatches are a common source of events appearing at an unexpected hour. Google Sheets interprets date-and-time values using spreadsheet settings, while Calendar displays events according to calendar and account settings. In Google Sheets, check File > Settings for the spreadsheet’s locale and time zone. Also check the relevant Calendar settings and confirm both systems reflect the intended location or working time zone.
A value stored as plain text may not be treated like a date value by Apps Script. If the script reports a date problem, format the cells as date and time and enter or re-enter the values as dates, rather than relying on text copied from another system. With CSV import, inspect a small sample after importing before assuming every regional date was interpreted correctly.
CSV is best suited to ordinary one-time events. Do not assume a list of repeated dates will become one recurring event rule; it may import as separate events. If you need a repeating series, configure recurrence in Google Calendar or build and carefully test an automation designed for that requirement. Likewise, an imported event’s later edits are not mirrored back into the sheet by default.
Common problems and ways to avoid them
- Calendar rejects the file: Confirm it is a CSV, the required headers are present and spelled correctly, and there is a header row followed by event data. Remove accidental title rows or blank columns above the headings.
- Events appear on the wrong date or time: Check the spreadsheet locale, date display, Calendar time zone, and whether the cell contains a real date-time value rather than text.
- Some events are missing: Look for blank subjects, malformed dates, empty rows, or start and end values that were not included in the exported tab. In the script, inspect the status column for rows marked for review.
- Events appear twice: Check whether the same CSV was imported previously or whether an Apps Script row was created without its status being recorded. Do not rerun a batch blindly.
- The wrong calendar received the events: When importing, verify the destination calendar before choosing Import. The example script uses the account’s default calendar, which may not be the calendar you intended.
Privacy and access to your calendar
Event rows can include personal or confidential information, so limit the sheet to details that belong in Calendar. A CSV file is a separate copy of the data; store it appropriately and delete it when it is no longer needed. Apps Script requires authorization to perform the actions requested by its code. A third-party add-on may request access to spreadsheets, calendars, or both, so read its permission request and privacy information before connecting it.
For a shared spreadsheet, remember that people with edit access may be able to change the source rows, while the script runs under the account that authorizes it. Decide who is allowed to run the automation and which calendar that account can modify. If events are important, keep a backup of the sheet and verify the resulting calendar entries rather than treating a successful script run as proof that every detail is correct.
Frequently Asked Questions
Can Google Sheets automatically create Google Calendar events?
Not by itself through a standard built-in Sheets command. You can import a CSV manually, use Apps Script to create events, or use an integration that you have reviewed and authorized.
Can I import Google Sheets events into an existing calendar?
Yes. In Calendar’s Settings > Import & export page, select the CSV and choose the destination calendar before importing. Check the destination carefully, since the import adds events to the calendar you select.
Will changes in my sheet update events already in Calendar?
No, not with a CSV import or the basic script above. Those methods create events, but do not maintain a live two-way sync. Updating existing events requires a separate process that identifies each event and applies changes deliberately.
Can I create all-day events from a sheet?
Yes. For CSV import, use the All Day Event column and set it to True for the relevant rows, along with the event dates. The sample Apps Script is for timed events and would need changes to create all-day events.
Can I create events in a calendar other than my default one?
Yes, but the sample script intentionally uses the default calendar. To target another calendar, the script must be adapted to select that calendar, and the authorizing account must have permission to add events to it. With CSV import, choose the destination in Calendar’s import settings.
Can I do this in Excel instead?
You can prepare the event columns in Excel and save or export the data as a CSV, then import that file into Google Calendar. Apps Script and the Google Sheets menu paths in this guide are specific to Google Workspace, not Excel.
Related
- Power Query: Select Columns and Keep the Fields You Need
- Google Sheets Data Cleaning: Tools, Steps, and Tips
- How to Add an Image Box to an Excel Data Entry Form
Try it: the Date Difference Calculator: days, months, years and weekdays between two dates, with the DATEDIF formulas.
More in How-to basics
- Excel Hide Text Under the Next Column?In Excel for Microsoft 365 on Windows, text spills into the next column when that neighboring cell is…
- Excel Text to Columns by Word: Methods That WorkTo split text at spaces between words, select the cells and choose Data > Text to Columns >…
- How to Insert a Dynamic Checkbox in Microsoft WordTo insert a dynamic, clickable checkbox in Word, show the Developer tab, then choose Developer > Check Box…
- Free Savings Tracker Google Sheets: Set Up a Simple SheetYes. You can make a free savings tracker in Google Sheets by starting with a blank spreadsheet, recording…
- How to Create Rules in Microsoft OutlookCreate an Outlook rule by choosing a condition, such as who sent a message or words in its…
- How to Insert a Full Line in Word: Borders and ShapesTo insert a full-width horizontal line in Word, put the cursor in the paragraph where the divider should…
Sources: Function behaviour and menu paths: Microsoft Support documentation for Excel. Method & sources
Spotted an error in this guide? Let us know.