- Generate standardized invoice reports that consolidate data from multiple PDF invoices into a consistent format
- Create financial summaries with automatically calculated totals and formatted currencies
- Produce inventory sheets that expand horizontally and vertically based on your data
- Build dynamic pricing tables that adapt to product lists of any size
- Generate expense reports with formulas that compute totals, taxes, and approvals
Add the action
In the Workflow builder, click + between blocks and select Create Microsoft Excel Document from Template from the action library.



Upload the Excel template
Click to upload your Excel document template (.xlsx file) that contains placeholders for dynamic content. See Template placeholders below for how to set up your template.

Enter the output document name
Provide a name for the generated Excel document. This will be the filename when the document is created. You can use variables from previous steps.

Configure template fields
Under the Template Fields section, map each placeholder in your template to a variable from previous Workflow steps or trigger inputs.For example, in an invoice summary template:
- {invoices} maps to a list variable containing objects with “invoiceNumber”, “totalAmount”, “date”, “dueDate”, and “items” properties
- {grandTotal} maps to a calculated total from your data processing
- {hasVAT} maps to a boolean variable that controls whether to show the VAT requirements row

Preview and download the document
After running the Workflow, preview the generated Excel document and download it by clicking the icons next to the action in the results panel.

Attach the document to other actions (optional)
You can use the generated Excel document as an attachment in other actions like Send Email. Reference the Excel document output from this action when configuring email attachments.

Template placeholders
Use placeholders in your Excel template to define where dynamic content should appear. Cassidy detects these placeholders when you upload the template and lets you map them to Workflow variables.
Text placeholders
Use text placeholders to insert text, numbers, or formatted content from your Workflow data. Syntax:{variableName}

Conditionals
Use conditionals to display rows or cells only when certain conditions are true, or to show alternative content when conditions are false. Syntax:- Standard:
{#if:conditionName}…{/if:conditionName} - Inverse:
{^if:conditionName}…{/if:conditionName}

Loops
Use loops to create multiple rows or columns from arrays of data. Syntax:- Vertical loops (for rows):
{#loop:arrayName}…{/loop:arrayName}— the beginning and end must be on the same row but in different cells - Horizontal loops (for columns):
{>loop:arrayName}— no closing tag needed, place child properties in the same cell

Inner loops
When the loop start and end are in the same cell, content repeats within that cell instead of creating new rows. Template:

Horizontal loops
Use the> prefix to expand data horizontally across columns.
Template:


Nested loops
You can nest loops to handle multi-level data like invoices with multiple line items. Template:

Variable scope in loops
When you’re inside a loop, you can access both properties of the current item and properties from outside the loop:- Properties of the current item — use the field names directly
- Properties from outside the loop — these remain accessible
Data format for loops
If your template has this loop structure:Troubleshooting
Tags not processed
Tags not processed