All nodes/Data/DataFrame I/O

Read XLSX

Reads a sheet of an Excel file (xlsx) from the connected file_store into a DataFrame. Supports selecting a sheet by name or index.

Read XLSX
File storeSuccess
Error

Type in the graph: df_read_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
Read XLSX
Exit
  • Execute
  • Execute + Data
Press “Copy nodes”, open the editor and hit Ctrl+V on the canvas.

Runs as pasted

When to use it

Reads one sheet of an Excel workbook into a table (a DataFrame). The store, the path and “Connection source” work exactly as in Read CSV — the difference is the file itself: no delimiter or encoding to guess, but one step reads exactly one sheet.

Use CSV when the file comes from a machine (a dump, an export, an API response), and XLSX when people send you a workbook: formatting, several sheets and dates that CSV would leave you to parse out of a string.

How it works

The “Sheet” field accepts either a name or a number: 0 is the first sheet, Report is the sheet with that name. Blank also means the first sheet. The field supports Jinja, so the sheet name can be assembled from a variable.

“Header row index” says which row of the sheet holds the column names: 0 is the first row. If the table sits under a two-line report title, set 2.

The whole table travels downstream, while the log shows a preview — the first 50 rows, the shape and the column types.

Common mistakes

  • A sheet with a numeric name. An all-digits value is always read as an index: a sheet named 2024 cannot be selected this way — the node looks for sheet number 2024 and fails. Rename the sheet or pick it by position.
  • The legacy .xls format. Only .xlsx/.xlsm workbooks are read; an old-format file has to be re-saved.
  • Expecting every sheet at once. The node returns one sheet. For a second one add a second node and join the results with DF Concat.
  • Merged cells in the header. A merged cell’s value lands only in the first of the columns; the rest come back empty, named Unnamed: 2 and so on.
  • A workbook over the limit. “Max bytes” (25 MiB) truncates the transfer, and a truncated xlsx cannot be parsed at all: the step fails with a parse error. Such a workbook has to be reduced, or the sheet you need exported as CSV.

Inputs

PortWirePayloadNotes
File storefile_storeDatadata

shown when connection_source ≠ "auto"

Outputs

PortWirePayloadNotes
SuccessoutputExecute + Dataexecute_datadataframe
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

Sheetsheet_namestring0

Sheet index (integer) or sheet name. Default 0 = first sheet. Supports Jinja.

supports templates

Header row indexheader_rowinteger0

Row index of the column header (0-based). Use -1 to skip the header.

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_bytesinteger26214400

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.