Skip to main content

Split a Multi-Sheet Excel Workbook into Separate Files in Power Automate (4 Actions, Any Sheet Count)

· 20 min read
SEO and Content Writer

A workbook with 5, 50, or 500 sheets can be split into individual .xlsx files in a single Power Automate flow. PDF4me Excel - Separate Worksheets returns an array with one file per sheet; an Apply to each loop fans the writes out to Dropbox, SharePoint, OneDrive, or Dataverse. This guide walks through the exact run shown in the screenshots: a 5-tab Separate.xlsx in Dropbox becomes Sheet1.xlsx through Sheet5.xlsx in an output folder. Total flow: 4 actions, zero code, runs in ~9 seconds end-to-end.

The flow at a glance
1. Manual trigger
Manually trigger a flow. Swap for any trigger that produces a workbook.
2. Get file content (path)
Dropbox path: /pdf4metest/excel/separate worksheets/Separate.xlsx
3. Excel - Separate Worksheets
PDF4me action. Splits the 5-sheet workbook into 5 single-sheet XLSXes.
4. Apply to each → Create file
Loop outputDocuments. Each iteration writes one sheet as its own .xlsx to Dropbox.
The short version

A manual trigger starts the flow. Dropbox Get file content using path reads Separate.xlsx (5 sheets, each with a different roster of People records). Excel - Separate Worksheets returns an outputDocuments array with 5 entries: {fileName: "Sheet1.xlsx", streamFile: "<base64>"} through Sheet5.xlsx. An Apply to each over outputDocuments runs once per sheet (the screenshot shows the 1 of 5 iteration counter) and uses Create file to drop each XLSX into /pdf4metest/excel/separate worksheets/output. Browse the output folder and the 5 split files are there, sorted alphabetically.

The one thing people miss: Apply to each is not optional

Excel - Separate Worksheets returns an array, not a single file. The number of entries depends on the source workbook (2 sheets in → 2 entries; 50 sheets in → 50 entries). Always wrap the next step in Apply to each over outputDocuments. Picking File Content from outside the loop returns nothing useful. Inside the loop, the dynamic content picker exposes File Name and File Content on the current item.

Common real-world questions this solves

People search this problem with surprisingly specific phrasing. Here are the actual queries this flow answers:

  • "How do I split an Excel file with multiple sheets into separate files automatically?" Yes. This flow does exactly that. Drop the source workbook into Dropbox, the split + upload happens hands-free.
  • "Can Power Automate save each sheet as a separate Excel file?" Yes, via the PDF4me Connect action plus an Apply to each loop. No VBA, no Office Scripts.
  • "Do I have to write one action per sheet?" No. The Apply to each handles any sheet count. The flow body never changes.
  • "What if the workbook has 100 sheets?" Same flow. The loop just iterates 100 times. Each iteration is ~1 second.
  • "Can I rename the output files?" Yes, build the new name with a Compose step or expression inside the loop before Create file. See the troubleshooting section.

What you are building

A four-action Power Automate flow that takes any multi-sheet .xlsx and writes one file per worksheet to a destination folder. Reusable across HR rosters, sales pipelines split by region, monthly reports split by month, anything that lives as multiple tabs in a single workbook.

Power Automate flow with four actions: Manually trigger a flow, Dropbox Get file content using path, PDF4me Excel - Separate Worksheets, then For each Create file (showing iteration 1 of 5). Run timings 0s, 1s, 2s, 5s for the For each, 1s for Create file.
The full flow. The For each runs 5 times (once per output sheet); each iteration is ~1 second.

What you need

  • Power Automate account with a flow open in the cloud designer. Open Power Automate.
  • PDF4me API key. Get your API key. Add the PDF4me Connect connection the first time you drop the action.
  • Dropbox with a source folder and an output folder. Any storage works: SharePoint, OneDrive, Dataverse map the same way.
  • A multi-sheet Excel workbook. Download separate.xlsx to follow along exactly (5 tabs, People records).

Quick reference: what each part does

outputDocuments
The array the action returns. One entry per sheet. Always loop with Apply to each.
File Name (item)
Sheet name plus .xlsx extension. Pass directly into Create file File Name.
File Content (item)
Binary single-sheet workbook. Pass directly into Create file File Content.
Worksheet Indexes
Optional. Leave empty for all sheets. Comma-separated 1-based to restrict (e.g. 1,3).
Culture & Language
Defaults to en-US. Switch to fr-FR, de-DE, ja-JP, pt-BR for non-US sheet content.
Error Details Item
Itemised failure array. Empty on success; wire into a Condition for retry logic.

A look at the input

Open Separate.xlsx in Excel. It has 5 sheet tabs (Sheet1 through Sheet5), each populated with rows of People records: First Name, Last Name, Gender, Country, Age, Date, Id.

Separate.xlsx open in Excel showing Sheet5 active. Columns are number, First Name, Last Name, Gender, Country, Age, Date, Id. Around 50 rows of records. Sheet tabs Sheet1, Sheet2, Sheet3, Sheet4, Sheet5 visible at the bottom.
Source workbook. Five sheet tabs at the bottom, each ~50 rows of People records.
Dropbox source folder /pdf4metest/excel/separate worksheets containing Separate.xlsx.
The source folder before the flow runs. Just the one workbook.

Build the flow

Action 1: Manually trigger a flow

For testing, the manual trigger is fastest. In production, replace it with When a file is created (Dropbox), When an item is created (SharePoint), When a new email arrives (Outlook), Recurrence, or any other trigger.

Action 2: Dropbox - Get file content using path

Point it at the source workbook:

/pdf4metest/excel/separate worksheets/Separate.xlsx

Leave Infer Content Type at its default (Yes) under Advanced parameters.

Dropbox Get file content using path action. File Path is set to /pdf4metest/excel/separate worksheets/Separate.xlsx. Advanced parameters Infer Content Type is Yes.

Action 3: PDF4me - Excel - Separate Worksheets

Search for PDF4me in the action picker and pick Excel - Separate Worksheets. Configure:

FieldValue used in this run
File ContentFile Content from the previous Dropbox step (dynamic content)
File NameSeparate.xlsx
Culture & Language Settings (Advanced)en-US (default. change only for non-US locales)
PDF4me Excel - Separate Worksheets action configured. File Content mapped from Dropbox Get file content. File Name Separate.xlsx. Advanced parameters showing Culture & Language Settings en-US.
Action config. Culture defaults to en-US. switch to fr-FR, de-DE, ja-JP etc. only if sheet content uses non-US number / date formats.

Action 4: Apply to each → Dropbox - Create file

After the Separate Worksheets action, add Apply to each and select outputDocuments from the dynamic content picker. Inside the loop, drop a Dropbox Create file action and configure it like this:

FieldValue used in this run
Folder Path/pdf4metest/excel/separate worksheets/output
File NameFile Name (dynamic content from the current item)
File ContentFile Content (dynamic content from the current item)
Apply to each loop wrapping the Create file action. The select-an-output dropdown shows outputDocuments selected from the previous Excel - Separate Worksheets step.
The Apply to each iterates outputDocuments. The current-item File Name and File Content show up in the dynamic content picker inside the loop.
Dropbox Create file inside the loop. Folder Path /pdf4metest/excel/separate worksheets/output. File Name dynamic content. File Content dynamic content. Connected to Dropbox.
Inside the loop. File Name and File Content come from the current item.

Save and click Test. Done.


The result

Open the output folder in Dropbox. The 5 single-sheet workbooks have landed, each named after its source sheet:

Dropbox output folder listing Sheet1.xlsx, Sheet2.xlsx, Sheet3.xlsx, Sheet4.xlsx, Sheet5.xlsx.
Five separate workbooks, one per source sheet, sorted alphabetically.

Download the actual output files from this run: sheet1.xlsx, sheet2.xlsx, sheet3.xlsx, sheet4.xlsx, sheet5.xlsx.


Troubleshooting

Apply to each does not show File Name / File Content
Make sure the loop is iterating outputDocuments, not the action itself. Click the Apply to each dropdown, search "outputDocuments", and pick it.
Only one file appears in the output folder
Create file is OUTSIDE the loop. Drag it inside the Apply to each container so it runs once per item.
Output files all overwrite each other
Two causes: (a) File Name is hardcoded instead of mapped to dynamic content. delete and re-pick File Name from the inner item; (b) two sheets in the source share the same name. rename them in Excel or build a unique name in a Compose step.
Decimals read as text or dates
A sheet using 1.234,56 (comma decimal) gets misinterpreted because Culture & Language Settings is en-US. Switch to your locale (fr-FR, de-DE, pt-BR, etc).
Cross-sheet formula came out as #REF!
Expected. After splitting, =Sheet2!A1 from a Sheet1 output cannot resolve because Sheet2 is now in a different file. Plan each sheet to be self-contained, or pre-compute the values upstream.
Need a date prefix on each output file name
Inside the Apply to each, add a Compose before Create file with: concat(formatDateTime(utcNow(),'yyyy-MM-dd'),'_',items('Apply_to_each')?['fileName']). Point File Name at the Compose output. Result: 2026-06-02_Sheet1.xlsx.

When to use this pattern

Monthly report distribution
One workbook arrives with Jan, Feb, Mar tabs. Split, then email each tab to its owner.
Regional sales splits
Single workbook with one tab per territory becomes individual files for each regional manager.
HR roster fan-out
One company workbook with one tab per department. Upload each tab to the right SharePoint library.
Data prep for downstream tools
Many BI and accounting tools accept single-sheet inputs only. Split once, ingest many.
Compliance and auditing
Each split file is a self-contained artifact you can store, version, or sign without dragging the rest of the workbook.


FAQ

How do I split an Excel file with multiple sheets into separate files automatically in Power Automate?+
Use the PDF4me Excel - Separate Worksheets action. It takes a single multi-sheet .xlsx as input and returns an outputDocuments array with one file per sheet. Wrap the result in an Apply to each loop and write each item with Create file. Four actions total: trigger, Get file content, Separate Worksheets, Apply to each → Create file.
Can Power Automate save each sheet as a separate Excel file without code?+
Yes. The PDF4me Excel - Separate Worksheets action is a no-code cloud connector. There is no VBA, no Office Script, no Power Automate Desktop required. it runs entirely in the Power Automate cloud designer and outputs ready-to-save .xlsx files.
What happens if the source workbook has a different sheet count next run?+
Nothing breaks. The action dynamically returns one outputDocuments entry per sheet present, and the Apply to each iterates whatever the array length is. Build the flow once with a 5-sheet sample and it will handle 2-sheet or 200-sheet workbooks identically.
Do the output files keep their sheet names?+
Yes. Each output file is named after its source sheet name plus the .xlsx extension. Sheet5 → Sheet5.xlsx. If you have custom sheet names (e.g. "Q1 2025"), the output file is "Q1 2025.xlsx" accordingly.
Will my formulas still work after the split?+
Intra-sheet formulas (everything that references cells on the same sheet) work as expected. the engine preserves cell values, number formats, and styles. Cross-sheet references like =Sheet2!A1 cannot survive because Sheet2 is no longer in the same file; expect those to become #REF!. Plan the workbook so each sheet is self-contained, or pre-compute the values upstream.
Can I use SharePoint, OneDrive, or Dataverse instead of Dropbox?+
Yes. Swap the Dropbox actions for SharePoint Get file content / Create file, OneDrive Get file content / Create file, or Dataverse Download file / Add file. The PDF4me action and its parameters are identical regardless of source.
How do I rename the output files (add a date prefix, replace spaces, etc.)?+
Inside the Apply to each loop, add a Compose step before Create file. Build the new name with concat() and formatDateTime() expressions, then bind Create file → File Name to the Compose output. Example: concat(formatDateTime(utcNow(),'yyyy-MM-dd'),'_',items('Apply_to_each')?['fileName']) produces 2026-06-02_Sheet1.xlsx.
Is there a limit on the number of sheets I can split?+
Practical limits are bounded by Power Automate run-time and action body size. A single workbook with hundreds of sheets is fine; the loop just iterates more times. For thousands of sheets, consider Power Automate concurrency settings or batching the work across multiple runs.
Does this work in Power Automate Desktop?+
PDF4me Connect is a cloud connector available in Power Automate (the web flow designer). For Power Automate Desktop, call the same Separate Worksheets REST endpoint with the HTTP action.

Get started