Convert Excel Files to CSV in Google Drive with Apps Script – A Complete Guide
Google Drive is a powerful cloud storage solution, and with the help of Google Apps Script, you can automate tasks like file conversions, backups, data exports, and more.
One common requirement is to automatically convert Excel files (.xlsx or .xls) stored in Google Drive into CSV files, especially if you want to:
Integrate with external systems
Use data for imports
Store lighter-weight formats
Schedule regular data extractions
In this detailed guide, you'll learn how to write a Google Apps Script that scans your Google Drive for Excel files, converts them into CSV format, and optionally saves them to a designated folder.
There are many reasons:
CSV is simpler, lightweight, and universally supported
Ideal for importing/exporting data to/from software or databases
Easier to read using scripts or parsers
Better for version control and comparisons
Used by APIs and integrations that don’t support Excel formats
A Google Drive account with Excel files uploaded
Basic knowledge of Google Apps Script
Permission to access and create files in your Drive
Click on New Project
Give your project a name like: Excel to CSV Converter
Copy and paste the following script into the editor:
function convertExcelToCSV() {
const sourceFolderId = 'YOUR_SOURCE_FOLDER_ID'; // Folder containing Excel files
const destinationFolderId = 'YOUR_DEST_FOLDER_ID'; // Folder where CSVs will be saved
const sourceFolder = DriveApp.getFolderById(sourceFolderId);
const destFolder = DriveApp.getFolderById(destinationFolderId);
const files = sourceFolder.getFilesByType(MimeType.MICROSOFT_EXCEL);
while (files.hasNext()) {
const file = files.next();
const fileName = file.getName();
const blob = file.getBlob();
// Convert Excel to Google Sheets temporarily
const tempFile = DriveApp.createFile(blob).setName(fileName);
const spreadsheet = SpreadsheetApp.open(tempFile);
const sheets = spreadsheet.getSheets();
for (let i = 0; i < sheets.length; i++) {
const sheet = sheets[i];
const csvData = convertSheetToCsv(sheet);
const csvFileName = `${fileName.replace(/\.[^/.]+$/, "")} - ${sheet.getName()}.csv`;
const csvBlob = Utilities.newBlob(csvData, 'text/csv', csvFileName);
destFolder.createFile(csvBlob);
}
// Clean up temporary file
DriveApp.getFileById(spreadsheet.getId()).setTrashed(true);
}
Logger.log('Conversion complete.');
}
// Helper function to convert a Sheet to CSV string
function convertSheetToCsv(sheet) {
const data = sheet.getDataRange().getValues();
return data.map(row =>
row.map(cell => `"${String(cell).replace(/"/g, '""')}"`).join(',')
).join('\r\n');
}
Update the placeholders:
'YOUR_SOURCE_FOLDER_ID': ID of the folder containing Excel files
'YOUR_DEST_FOLDER_ID': ID of the folder where CSVs should be saved
You can find a folder's ID in the URL when you're inside that folder:
https://drive.google.com/drive/folders/XXXXXXXXXXXXXXXXXXXX
Just copy the XXXXXXXXXXXXXXXXXXXX part.
Click File > Save.
Click the Run ▶️ button to execute convertExcelToCSV.
The first time, it will ask for authorization. Grant the required permissions.
Once the script finishes, your destination folder will contain the converted CSV files.
Let’s break down the script:
const sourceFolder = DriveApp.getFolderById(sourceFolderId);
const destFolder = DriveApp.getFolderById(destinationFolderId);
This gets a handle on the folders where Excel files are located and where CSVs will be stored.
const files = sourceFolder.getFilesByType(MimeType.MICROSOFT_EXCEL);
Only fetches .xlsx or .xls files. (You can also use getFiles() to include all file types.)
const tempFile = DriveApp.createFile(blob).setName(fileName);
const spreadsheet = SpreadsheetApp.open(tempFile);
This step is crucial: Google Apps Script cannot directly parse .xlsx, so we convert it into a temporary Google Sheets file first.
for (let i = 0; i < sheets.length; i++) {
const csvData = convertSheetToCsv(sheet);
}
Each worksheet inside the Excel file becomes its own CSV.
row.map(cell => `"${String(cell).replace(/"/g, '""')}"`).join(',')
This line ensures:
Each cell is enclosed in double quotes
Embedded quotes are escaped by doubling them
Values are comma-separated
const csvBlob = Utilities.newBlob(csvData, 'text/csv', csvFileName);
destFolder.createFile(csvBlob);
Creates a new file in the target folder.
DriveApp.getFileById(spreadsheet.getId()).setTrashed(true);
Deletes the temporary Google Sheets file created during conversion.
You can modify or extend the script to:
Skip already converted files (check existing filenames)
Convert only the first sheet
Add a timestamp to filenames
Send a report email when done
Schedule automatic conversions using time-based triggers
Go to the Apps Script project
Click the clock icon (Triggers)
Add a new trigger
Function: convertExcelToCSV
Event: Time-driven
Frequency: Daily, Weekly, or Hourly
This way, any Excel file added to the source folder will be automatically converted.
Authorization Errors: Run the script manually once to trigger authorization prompt.
No Files Converted?: Ensure the folder IDs are correct and files are .xls or .xlsx.
Special Characters or Formatting: CSV is plain-text only. Advanced formatting like colors or formulas will not be retained.
Multiple Sheets?: This script creates a CSV file for each sheet in the Excel file.
Automated Data Pipeline: Convert and load Excel data into a database
Migration: Standardize Excel uploads as CSV for integration
Data Entry Automation: Teams upload Excel files and CSVs are generated for processing
API Integration: Use CSV outputs in webhooks or integrations
Team Collaboration: Keep Excel formatting private but share plain CSV for developers or analysts
With Google Apps Script, you can automate the conversion of Excel files to CSV format — directly in Google Drive — without any manual intervention. This solution saves time, ensures consistency, and integrates well with other tools or systems that require CSV input.
By setting up this script and optionally scheduling it with triggers, you can streamline Excel data processing and eliminate repetitive work entirely.
Whether you're building a report automation system, importing data to a CRM, or simply reducing manual CSV exports — this solution is simple, scalable, and extremely powerful.