Nodes/ComfyUI-outputlists-combiner/Spreadsheet OutputList
ComfyUI Node

Spreadsheet OutputList

Run your whole prompt batch straight out of a spreadsheet

By geroldmeisinger·Created 9 months ago·Updated about 11 hours ago· 183
Spreadsheet OutputList
    • list_a
    • list_b
    • list_c
    • list_d
    • count
    rows_and_colsA B C D
    header_rows1
    header_cols1
    select_nth-1
    string_or_base64

    If you're the kind of person who manages prompt batches, LoRA model lists, or strength sweeps in a spreadsheet - and a surprising number of power users are - this node is the payoff. Spreadsheet OutputList reads a spreadsheet (.csv, .tsv, .ods, .xlsx, .xls) and emits up to four output lists from the rows or columns you select. Update the sheet in Excel, hit queue, and the workflow iterates your new list. No copying text into a node by hand.

    Under the hood it's pandas: read_excel for binary spreadsheet formats, read_csv for text. The dependencies get heavy here (pandas plus odfpy, openpyxl, xlrd, pyxlsb for the various formats), which is why the README points out this pack ships these for you.

    The inputs that matter

    • string_or_base64 - the data. Raw CSV/TSV text works directly. For .ods/.xlsx/.xls you paste a base64 blob, which you get from the pack's Load Any File node (it outputs base64 for binary files). That pairing is the intended workflow.
    • rows_and_cols - which rows or columns become lists. Default A B C D takes four columns; you can also select rows with numbers (1 2 3), and prefix with a sheet for multi-sheet files (e.g. $MySheet.A). Outputs are list_a … list_d in that order.
    • header_rows / header_cols - skip leading rows or columns before a selection starts (default 1 each).
    • select_nth - pick a single entry (0-based) from every list, instead of emitting all of them. Pair it with a PrimitiveInt control_after_generate=increment counter and you get "one row per run" stepping - the pack's recommended pattern for testing a batch one item at a time. -1 (default) means "all".

    Also note the off-by-one trap the tooltip warns about: spreadsheet rows start at 1 and columns at A, but select_nth is 0-based. The wrong number silently picks a different row, so count carefully.

    Outputs

    list_a through list_d - output lists of strings (every cell becomes a string), plus count (the length of the longest list). Empty/unused slots come back as empty lists, which downstream combination nodes tolerate gracefully.

    Installing

    Search "OutputLists Combiner" in ComfyUI Manager, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/geroldmeisinger/ComfyUI-outputlists-combiner
    cd ComfyUI-outputlists-combiner
    uv pip install -r requirements.txt
    

    Restart after. This node is where the pandas stack actually earns its keep; if you never touch spreadsheets, you can ignore it and the dependency is still shared, not doubled.

    Where people get stuck: pasting a CSV that has a leading newline or BOM, which pandas may read as a header row - bump header_rows to 0 if your first row of data keeps vanishing.

    CategoryUtility

    Inputs (5)

    NameTypeDefaultDescription
    rows_and_colsSTRINGA B C DIndices and names of rows and columns in the spreadsheet. Note that in spreadsheets rows start at 1, columns start at A, whereas OutputLists are 0-based (in `select-nth`).
    header_rowsINT10–65535Ignore the first x rows in the list. Only used if you specify a col in `rows_and_cols`.
    header_colsINT10–65535Ignore the first x cols in the list. Only used if you specify a row in `rows_and_cols`.
    select_nthINT-1-1–65535Only select the nth entry (0-based). Useful in combination with the `PrimitiveInt+control_after_generate=increment` pattern.
    string_or_base64STRINGCSV/TSV string or spreadsheet file in base64 (for `.ods .xlsx .xls`). Use `Load Any File` node to load a file as base64.

    Outputs (5)

    NameTypeDescription
    list_aSTRINGuse(s) `is_output_list=True` (indicated by the symbol `𝌠`) and will be processed sequentially by corresponding nodes.
    list_bSTRINGuse(s) `is_output_list=True` (indicated by the symbol `𝌠`) and will be processed sequentially by corresponding nodes.
    list_cSTRINGuse(s) `is_output_list=True` (indicated by the symbol `𝌠`) and will be processed sequentially by corresponding nodes.
    list_dSTRINGuse(s) `is_output_list=True` (indicated by the symbol `𝌠`) and will be processed sequentially by corresponding nodes.
    countINTNumber of items in the longest list.