Skip to main content
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’s with: 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

Declare columns 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

Use sheets instead of top-level columns / rows. Do not mix the two forms.

Cell types

  • Numbers and booleans are written as spreadsheet numbers and booleans.
  • null and 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 like 2026-02-31 are rejected) and are written as timezone-independent Excel date serials formatted yyyy-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.script if you need them as cell text.
Sheet names follow Excel rules: 1–31 characters, no : \ / ? * [ ], 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.