AutomationFlowsData & Sheets › Create Multi-sheet Excel Workbooks by Merging Datasets with Google Drive &…

Create Multi-sheet Excel Workbooks by Merging Datasets with Google Drive &…

Original n8n title: Create Multi-sheet Excel Workbooks by Merging Datasets with Google Drive & Sheets

ByRobert Breen @rbreen on n8n.io

Build an automated Excel file with multiple tabs directly in n8n. Two Code nodes generate datasets, each is converted into its own Excel worksheet, then combined into a single and (optionally) appended to a Google Sheet for sharing—eliminating manual copy-paste and speeding up…

Event trigger★★★★☆ complexity12 nodesGoogle SheetsGoogle Drive
Data & Sheets Trigger: Event Nodes: 12 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #7955 — we link there as the canonical source.

This workflow follows the Google Drive → Google Sheets recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "5432b2ed-adde-4021-b6b3-e75e43bd102c",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -576,
        1728
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "dcdb5d9e-4f54-46af-8f45-b922cad98117",
      "name": "Convert to File",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        288,
        1344
      ],
      "parameters": {
        "options": {
          "sheetName": "Sheet1"
        },
        "operation": "xlsx"
      },
      "typeVersion": 1.1
    },
    {
      "id": "f4bd8d4b-0a5b-457a-819e-1caf7a3c6363",
      "name": "Convert to File1",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        288,
        1632
      ],
      "parameters": {
        "options": {
          "sheetName": "Sheet2"
        },
        "operation": "xlsx",
        "binaryPropertyName": "data2"
      },
      "typeVersion": 1.1
    },
    {
      "id": "f9ab703d-41fb-4e69-841a-62a952644084",
      "name": "Merge1",
      "type": "n8n-nodes-base.merge",
      "position": [
        624,
        1504
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineAll"
      },
      "typeVersion": 3.2
    },
    {
      "id": "021b89d0-278d-4c85-9b67-f51baa3a0231",
      "name": "Sticky Note60",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        1264
      ],
      "parameters": {
        "color": 3,
        "width": 224,
        "height": 624,
        "content": "### 1\ufe0f\u20e3 Connect Google Sheets (OAuth2)\n1. In **n8n \u2192 Credentials \u2192 New \u2192 Google Sheets (OAuth2)**  \n2. Sign in with your Google account and grant access  \n3. **Copy the example sheet referenced in the Google Sheets node** (open the node and duplicate the linked sheet), or select your own  \n4. In the workflow\u2019s **Google Sheets** node, \n\nhttps://docs.google.com/spreadsheets/d/1G6FSm3VdMZt6VubM6g8j0mFw59iEw9npJE0upxj3Y6k/edit?gid=1978181834#gid=1978181834"
      },
      "typeVersion": 1
    },
    {
      "id": "dd8fef83-2469-4630-863e-08a307930e8a",
      "name": "Sticky Note62",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        1424
      ],
      "parameters": {
        "color": 3,
        "width": 224,
        "height": 544,
        "content": "### 2\ufe0f\u20e3 Connect Google Drive (OAuth2)\n1. In **n8n \u2192 Credentials \u2192 New \u2192 Google Drive (OAuth2)**  \n2. Sign in with the Google account that will store your Excel outputs and **allow access**  \n3. In your Drive-related nodes (if used), point to the **folder** where you want the `.xlsx` saved or retrieved\nmerges them into a **single workbook with multiple tabs**, and optionally appends rows to Google Sheets.  "
      },
      "typeVersion": 1
    },
    {
      "id": "b5413d5e-1efe-417e-b7c4-3ae52112d8ee",
      "name": "Sticky Note54",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -736,
        1040
      ],
      "parameters": {
        "color": 7,
        "width": 2144,
        "height": 1056,
        "content": "### Create multi-sheet Excel workbooks in n8n to automate reporting using Google Drive + Google Sheets\n\nBuild an automated Excel file with **multiple tabs** directly in n8n. Two Code nodes generate datasets, each is converted into its own Excel **worksheet**, then combined into a single `.xlsx` and (optionally) appended to a Google Sheet for sharing\u2014eliminating manual copy-paste and speeding up reporting.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "203a12f7-582d-4664-bbbf-e1f6f3093567",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1184,
        1040
      ],
      "parameters": {
        "width": 400,
        "height": 1056,
        "content": "\n## Setup (only 2 connections)\n\n### 1\ufe0f\u20e3 Connect Google Sheets (OAuth2)\n1. In **n8n \u2192 Credentials \u2192 New \u2192 Google Sheets (OAuth2)**  \n2. Sign in with your Google account and grant access  \n3. **Copy the example sheet referenced in the Google Sheets node** (open the node and duplicate the linked sheet), or select your own  \n4. In the workflow\u2019s **Google Sheets** node, select your **Spreadsheet** and **Worksheet**\n\n### 2\ufe0f\u20e3 Connect Google Drive (OAuth2)\n1. In **n8n \u2192 Credentials \u2192 New \u2192 Google Drive (OAuth2)**  \n2. Sign in with the Google account that will store your Excel outputs and **allow access**  \n3. In your Drive-related nodes (if used), point to the **folder** where you want the `.xlsx` saved or retrieved\nmerges them into a **single workbook with multiple tabs**, and optionally appends rows to Google Sheets.  \n\n## \ud83d\udcec Contact  \nNeed help customizing this (e.g., filtering by campaign, sending reports by email, or formatting your PDF)?  \n\n- \ud83d\udce7 **rbreen@ynteractive.com**  \n- \ud83d\udd17 **https://www.linkedin.com/in/robert-breen-29429625/**  \n- \ud83c\udf10 **https://ynteractive.com**\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e2a70f89-3424-4518-8bff-68e239b798c8",
      "name": "Data Set 1",
      "type": "n8n-nodes-base.code",
      "position": [
        0,
        1232
      ],
      "parameters": {
        "jsCode": "// Example: First two columns of data\nreturn [\n  { json: { Name: \"Alice\", Age: 30 } },\n  { json: { Name: \"Bob\", Age: 25 } },\n  { json: { Name: \"Charlie\", Age: 35 } },\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "a700ca4e-57a2-4a23-ad99-9ad8abcace41",
      "name": "Data Set 2",
      "type": "n8n-nodes-base.code",
      "position": [
        32,
        1520
      ],
      "parameters": {
        "jsCode": "// Example: Another two columns of data\nreturn [\n  { json: { City: \"New York\", Country: \"USA\" } },\n  { json: { City: \"London\", Country: \"UK\" } },\n  { json: { City: \"Tokyo\", Country: \"Japan\" } },\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "62762267-68ef-4750-9703-ca9d6a1fe424",
      "name": "Save to google sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        960,
        1744
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "City",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "City",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Country",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Country",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1978181834,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G6FSm3VdMZt6VubM6g8j0mFw59iEw9npJE0upxj3Y6k/edit#gid=1978181834",
          "cachedResultName": "two"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1G6FSm3VdMZt6VubM6g8j0mFw59iEw9npJE0upxj3Y6k",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G6FSm3VdMZt6VubM6g8j0mFw59iEw9npJE0upxj3Y6k/edit?usp=drivesdk",
          "cachedResultName": "Blank"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "1cd9ffc5-5a41-4fa6-9a45-0dcade22fd37",
      "name": "Export Excel file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -176,
        1824
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "list",
          "value": "1G6FSm3VdMZt6VubM6g8j0mFw59iEw9npJE0upxj3Y6k",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G6FSm3VdMZt6VubM6g8j0mFw59iEw9npJE0upxj3Y6k/edit?usp=drivesdk",
          "cachedResultName": "Blank"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    }
  ],
  "connections": {
    "Merge1": {
      "main": [
        [
          {
            "node": "Save to google sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Set 1": {
      "main": [
        [
          {
            "node": "Convert to File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Set 2": {
      "main": [
        [
          {
            "node": "Convert to File1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to File": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to File1": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Export Excel file",
            "type": "main",
            "index": 0
          },
          {
            "node": "Data Set 1",
            "type": "main",
            "index": 0
          },
          {
            "node": "Data Set 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Build an automated Excel file with multiple tabs directly in n8n. Two Code nodes generate datasets, each is converted into its own Excel worksheet, then combined into a single and (optionally) appended to a Google Sheet for sharing—eliminating manual copy-paste and speeding up…

Source: https://n8n.io/workflows/7955/ — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

PCN. Uses googleSheets, httpRequest, @n-octo-n/n8n-nodes-json-database, itemLists. Event-driven trigger; 60 nodes.

Google Sheets, HTTP Request, @N Octo N/N8N Nodes Json Database +3
Data & Sheets

The workflow automates the process of gathering extensive keyword data for a "Main Keyword." It starts by reading initial parameters from a Google Sheets template, creates a new dedicated Google Sheet

Google Sheets, Google Drive, HTTP Request
Data & Sheets

🔥 March Sale – n8n Community Members Get ideoGener8r for Just $27! (Reg. $47) Use Coupon Code: (Valid until 3/31/2025 for n8n community members)

HTTP Request, Google Drive, Google Sheets
Data & Sheets

📄 Documentation: Notion Guide

Google Sheets, Google Drive, HTTP Request +2
Data & Sheets

Overview

Google Sheets, Google Drive, HTTP Request