All nodes/Data/DataFrame I/O

Write XLSX

Writes a DataFrame to an Excel file (xlsx) in the connected file_store. Overwrites the target file if it exists.

Write XLSX
DataFrameSuccess
File storeError

Type in the graph: df_write_xlsx

Exec

An error branch can be enabled (expose_error_output) to handle failures on their own path.

Ports can be split into separate execution and data handles.

Try it

Minimal working workflow

Entry
Write XLSX
Exit
  • Execute + Data
Press “Copy nodes”, open the editor and hit Ctrl+V on the canvas.

Runs as pasted

When to use it

Saves a table as an Excel workbook. The store and path mechanics are the same as in Write CSV; what differs is who receives the file.

Pick XLSX when a person will open it: numbers stay numbers and dates stay dates, and there are no encoding or delimiter questions at all — the format has none. CSV is still the better choice when another system reads the file, or when it is very large: xlsx is heavier and slower to build.

How it works

The “DataFrame” port carries both the trigger and the data — there is no separate execution input. As with the CSV writer, a list of objects or CSV text is accepted too: the node coerces it into a table itself.

“Sheet name” is a template; a blank value becomes Sheet1. The workbook is built from scratch every time, so it holds exactly one sheet.

The path is a template as well: reports/{{ variables.session_id }}.xlsx gives one workbook per session. The output is path, bytes_written and rows_written (data rows, header excluded).

Common mistakes

  • Expecting a sheet to be added to an existing workbook. The file at that path is replaced whole: old sheets, formulas and formatting disappear. To keep history, write each run to its own path.
  • Counting on formatting. The node writes data: column widths, styles, frozen headers and formulas are not configurable. If a branded look is required, prepare a template workbook outside Flow.
  • The WebDAV folder does not exist. The workspace store creates missing directories itself; on WebDAV a write into a non-existent folder fails.
  • One table across several sheets. A single DataFrame cannot be spread over sheets. Split the data earlier in the graph and write separate files, or assemble the report as CSV.
  • An empty table. You get a workbook with the header alone and rows_written: 0 — a successful run, not an error.

Inputs

PortWirePayloadNotes
DataFramedfExecute + Dataexecute_datadataframe
File storefile_storeDatadata

shown when connection_source ≠ "auto"

Outputs

PortWirePayloadNotes
SuccessoutputExecute + Dataexecute_dataobject
Erroron_errorExecute + Dataexecute_data

shown when expose_error_output = true

Configuration

FieldTypeDefaultDescription
File pathpathstring""

Path relative to the store root. Jinja templates are rendered per run, so ``reports/{{ variables.session_id }}.csv`` writes one file per session.

supports templates

Sheet namesheet_namestringSheet1

Name of the worksheet to create. Supports Jinja.

supports templates

Include header rowinclude_headerbooleantrue

Write the column names as the first row.

Connection sourceconnection_sourcestringauto

Where this node gets its connection. 'From the run context' uses what the platform already knows (the Telegram bot this workflow is deployed to / this workspace's own file store) and needs no wiring. 'External connection' shows the resource port so a config node can be wired into it.

Options: auto — From the run context, external — External connection (wire a config node)

Subfolderstore_subfolderstring""

Optional folder inside this workspace's store to treat as the root, e.g. `reports` or `sessions/{{ variables.session_id }}`. Blank = the store root.

supports templates

shown when connection_source = auto

Advanced
Max bytesmax_bytesinteger52428800

Refuse to transfer more than this many bytes.

Shared fields

Every node has these three — the platform adds them, not the node author.

  • expose_error_output — When enabled, show an execution output to connect nodes that run if this step fails.
  • split_ports_in — Show separate execution and data input handles instead of one combined port.
  • split_ports_out — Show separate execution and data output handles instead of one combined port.