transform.json-to-xlsx writes an XLSX workbook from ordered columns and an array of row objects.
Use it when a workflow already has tabular JSON — extract output, a script result, or rows from transform.xlsx-to-json — and needs a spreadsheet file. To fill an existing spreadsheet template, use Fill Template instead.
When to use it
The step always produces a run output file (
.xlsx) plus metadata: fileId, filename, sheetCount, and per-sheet row counts.
Configuration
Configuration goes inside the step’swith: block.
string
Output filename, supports LiquidJS; .xlsx is added if omitted
array<object>
Ordered columns for a single-sheet workbook. Use sheets for multiple sheets.
string | array<record<string, unknown>>
Array of row objects, or a template expression that resolves to one
array<object>
Multiple sheets. Do not combine with top-level columns/rows.
object
Optional workload caps that can only lower the server defaults. Omitted fields use the server defaults.
Output
File ID from the files table
Sanitized output filename including .xlsx
Number of sheets in the workbook
Per-sheet name and row count
Single sheet
Declarecolumns in display order. rows is usually a template expression that resolves to an array of objects. Extra keys on a row are ignored. Missing keys become blank cells.
Multiple sheets
Usesheets instead of top-level columns / rows. Do not mix the two forms.
Cell types
- Numbers and booleans are written as spreadsheet numbers and booleans.
nulland missing fields are blank.- YYYY-MM-DD strings stay text unless the column sets
type: date. Date columns require a valid civil date (overflow values like2026-02-31are rejected) and are written as timezone-independent Excel date serials formattedyyyy-mm-dd. - Strings that look like formulas (
=,+,-,@prefixes) are written as text. This step does not author Excel formulas. - Nested objects and arrays are rejected. Serialize them in a prior
transform.scriptif you need them as cell text.
: \ / ? * [ ], unique within the workbook, cannot start or end with a single quote, and History is reserved.
Workload limits
To keep worker memory and output size bounded,transform.json-to-xlsx enforces hard caps before building cell data and again after serializing the workbook. Override any cap with an optional limits object in the step config.
When a limit is exceeded, the step fails with an error that names the limit and the configured maximum. Raise only the caps you need for large exports.