Provides a spreadsheet designed for easy management of sets of associated plug values. Each column of the spreadsheet corresponds to an output value that can be connected to drive a plug on another node. Each row of the spreadsheet provides candidate values for each output, along with a row name and enabled status. Row names are matched against a selector to determine which row is passed through to the output. Row matching is performed as follows :

  • Matching starts with the second row and considers all subsequent rows one by one until a match is found. The first matching row is the one that is chosen.

  • Matching is performed using Gaffer’s standard wildcard matching. Each “name” may contain several individual patterns each separated by spaces.

  • The first row is used as a default, and is chosen only if no other row matches.


The matching rules are identical to the ones used by the NameSwitch node.

Keyboard Shortcuts

  • Return/Double Click Toggle/Edit selected cells.

  • D Toggle Enabled state of selected cells.

  • Ctrl + C/V Copy/Paste selected cells or rows.

  • Up, Down, Left, Right Move cell selection.

  • Shift + Up, Down, Left, Right Extend cell selection.

  • Ctrl + Up, Down, Left, Right Move keyboard focus.

  • Space Toggle selection state of cell with keyboard focus.


Container for user-defined plugs. Nodes should never make their own plugs here, so users are free to do as they wish.


Turns the node on and off.


The value that the row names will be matched against. Typically this will refer to a Context Variable using the ${variableName} syntax.


Holds a child RowPlug for each row in the spreadsheet.


The outputs from the spreadsheet. Contains a child plug for each column in the spreadsheet.


An output plug containing the names of all currently enabled rows.


An output plug containing the resolved cell values for all enabled rows, This can be used to drive expressions in situations where the standard out plug is not useful, or would be awkward to use. The values are formatted as follows :

    "row1Name" : { "columnName" : columnValue, ... },
    "row2Name" : { "columnName" : columnValue, ... },


The output is completely independent of the value of selector.


An output containing the index of the row that matches the selector in the current context.


The default row has index 0, which converts to False when used to drive a BoolPlug via a connection (all other values convert to True). Therefore Spreadsheet.activeRowIndex can be connected to a Node’s enabled plug to disable the node when no row is matched.