Skip to content

Excel ​

Reads and fills in an Excel workbook stored on SharePoint or on your OneDrive.

The Excel node reads and fills in an Excel workbook stored on a SharePoint site or on the member's OneDrive: the tracking workbook a team keeps by hand, which a workflow completes. Its three everyday gestures are adding a row when a new case arrives, updating the row of a case when a milestone is reached, and appending a timestamped comment to a cell without overwriting what is there. It is one node with a resource (resource) and, for each resource, an action.

The first question, Where the workbook lives (location), decides which access is needed:

  • sharepoint (default): the SharePoint capability, set in the Microsoft account field (credential); the workbook is picked through Site, Document library and Workbook. This access usually needs a Microsoft 365 administrator to grant consent once for the organization.
  • onedrive: the Files capability (OneDrive), set in the second Microsoft account field (credentialFiles); the workbook is picked in Workbook (workbookFile) among the files of the member's OneDrive.

Both are connected in Connections; see Microsoft. The workbook list offers .xlsx, .xlsm and .xltx files. For a Google spreadsheet, use Sheets — append a row; for a table kept inside the product, see Tables.

At a glance ​

  • Type: excel.api · version 1
  • Category: Actions
  • Kind: Step — one stage of a run
  • Effect: Writes outside (external_write) — writes outside Mankomail; described instead of performed during a test run
  • Needs a carrier email: No
  • Connection: Microsoft (capability sharepoint), Microsoft (capability files)
  • Inputs: main
  • Outputs: main

Connection ​

This node needs a Microsoft connection with the sharepoint capability granted.

This node needs a Microsoft connection with the files capability granted.

Parameters ​

location ​

Where the workbook lives

  • Type: One choice (options)
  • Required: Yes
  • Default: sharepoint
  • Options:
    • sharepoint — On a SharePoint site: The case of a workbook shared by the team. Requires the SharePoint connection.
    • onedrive — On my OneDrive: A personal workbook. Requires the OneDrive (Files) connection.

credential ​

Microsoft account — The account whose SharePoint rights are borrowed. This authorization usually needs a Microsoft 365 administrator to approve it.

  • Type: Connection (credential)
  • Required: No
  • Default: "" (empty)
  • Shown when: location is sharepoint

credentialFiles ​

Microsoft account — The account whose OneDrive is used. Connect it from Connections.

  • Type: Connection (credential)
  • Required: No
  • Default: "" (empty)
  • Shown when: location is onedrive

site ​

Site — The site that hosts the workbook library.

  • Type: Remote resource (resourceLocator)
  • Required: No
  • Default: {"mode":"id","value":""}
  • Ways to choose: pick from a list, type an ID, paste a URL (sharepoint.site)
  • Listed with the connection in: credential
  • Shown when: location is sharepoint

library ​

Document library

  • Type: Remote resource (resourceLocator)
  • Required: No
  • Default: {"mode":"id","value":""}
  • Ways to choose: pick from a list, type an ID (sharepoint.library)
  • Listed inside: site
  • Listed with the connection in: credential
  • Shown when: location is sharepoint

workbook ​

Workbook — The .xlsx file to read or fill in.

  • Type: Remote resource (resourceLocator)
  • Required: No
  • Default: {"mode":"id","value":""}
  • Ways to choose: pick from a list, type an ID (excel.workbook)
  • Listed inside: library
  • Listed with the connection in: credential
  • Shown when: location is sharepoint

workbookFile ​

Workbook — The .xlsx file on your OneDrive.

  • Type: Remote resource (resourceLocator)
  • Required: No
  • Default: {"mode":"id","value":""}
  • Ways to choose: pick from a list, type an ID (excel.onedrive_workbook)
  • Listed with the connection in: credentialFiles
  • Shown when: location is onedrive

resource ​

What to act on

  • Type: One choice (options)
  • Required: Yes
  • Default: table
  • Options:
    • sheet — Worksheet: The workbook worksheets.
    • table — Table: A named table with its headers: the shape a tracker almost always has.
    • range — Range: A rectangle of cells (A1:D20) — when there is no table.
    • cell — Cell: One precise cell: a milestone date, a timestamped comment.

sheetOperation ​

Action

  • Type: One choice (options)
  • Required: Yes
  • Default: sheet.list
  • Options:
    • sheet.list — List worksheets: The workbook’s worksheets, hidden ones included (visible tells them apart), in their own order — which carries meaning.
  • Shown when: resource is sheet

tableOperation ​

Action

  • Type: One choice (options)
  • Required: Yes
  • Default: table.add
  • Options:
    • table.list — List tables: The workbook tables and their headers.
    • table.read — Read rows: The rows, as named columns, with pagination.
    • table.add — Add a row: Appends at the end. With a key column, a retry of the step adds no duplicate.
    • table.update — Update a row: Finds the row by a key column value, then writes the named columns.
    • table.delete — Delete a row: Removes the row carrying that value.
  • Shown when: resource is table

rangeOperation ​

Action

  • Type: One choice (options)
  • Required: Yes
  • Default: range.read
  • Options:
    • range.read — Read a range: Leave the address empty to read the whole used area of the worksheet.
    • range.write — Write a range: The address is required: writing "somewhere" is not an option.
  • Shown when: resource is range

cellOperation ​

Action

  • Type: One choice (options)
  • Required: Yes
  • Default: cell.append
  • Options:
    • cell.read — Read a cell: Returns its content.
    • cell.write — Write a cell: Replaces the cell content.
    • cell.append — Append to a cell: Appends after what is already there — "one action = one timestamped comment".
  • Shown when: resource is cell

sheet ​

Worksheet

  • Type: Remote resource (resourceLocator)
  • Required: No
  • Default: {"mode":"id","value":""}
  • Ways to choose: pick from a list, type an ID (excel.sheet)
  • Listed inside: workbook
  • Listed with the connection in: credential
  • Shown when: location is sharepoint and (resource is range or resource is cell or (resource is table and tableOperation is one of table.list))

sheetName ​

Worksheet — The worksheet name, as it appears at the bottom of the workbook.

  • Type: Text (string)
  • Required: No
  • Default: "" (empty)
  • 200 characters at most
  • Example: Tracker
  • Shown when: location is onedrive and (resource is range or resource is cell or (resource is table and tableOperation is one of table.list))
  • Expressions: {{ }} accepted

table ​

Table

  • Type: Remote resource (resourceLocator)
  • Required: No
  • Default: {"mode":"id","value":""}
  • Ways to choose: pick from a list, type an ID (excel.table)
  • Listed inside: workbook
  • Listed with the connection in: credential
  • Shown when: location is sharepoint and (resource is table and tableOperation is one of table.read, table.add, table.update, table.delete)

tableName ​

Table — The table name (Table Design → Table Name, in Excel).

  • Type: Text (string)
  • Required: No
  • Default: "" (empty)
  • 200 characters at most
  • Example: Table1
  • Shown when: location is onedrive and (resource is table and tableOperation is one of table.read, table.add, table.update, table.delete)
  • Expressions: {{ }} accepted

values ​

Columns to write — The key is the column header, exactly as written in the table. Columns you omit keep their value.

  • Type: Key / value pairs (keyValue)
  • Required: No
  • Default: []
  • Shown when: resource is table and tableOperation is one of table.add, table.update
  • Expressions: {{ }} accepted

keyColumn ​

Matching column — The header that identifies the row — “Matter number”. On an add it guards against duplicates; left empty, a retry of the step would add a second row.

  • Type: Text (string)
  • Required: No
  • Default: "" (empty)
  • 200 characters at most
  • Example: Matter number
  • Shown when: resource is table and tableOperation is one of table.add, table.update, table.delete
  • Expressions: {{ }} accepted

keyValue ​

Value to match — Accepts {{ }} expressions: {{ data.extract_1.matter }}.

  • Type: Text (string)
  • Required: No
  • Default: "" (empty)
  • 500 characters at most
  • Example: {{ data.extract_1.matter }}
  • Shown when: resource is table and tableOperation is one of table.update, table.delete
  • Expressions: {{ }} accepted

address ​

Address — A range (A1:D20) or a cell (C12). When reading a range, left empty, the whole used area of the worksheet is returned.

  • Type: Text (string)
  • Required: No
  • Default: "" (empty)
  • 100 characters at most
  • Example: C12
  • Shown when: resource is range or resource is cell
  • Expressions: {{ }} accepted

rows ​

Values — One line per spreadsheet row, cells separated by semicolons or tabs. A JSON array ([["a","b"],["c","d"]]) is accepted too.

  • Type: Long text (text)
  • Required: No
  • Default: "" (empty)
  • 100000 characters at most
  • Example: Smith;2026-0412;Open
  • Shown when: resource is range and rangeOperation is one of range.write
  • Expressions: {{ }} accepted

value ​

Value — Accepts {{ }} expressions. Excel reads dates and numbers according to the cell format.

  • Type: Text (string)
  • Required: No
  • Default: "" (empty)
  • 32000 characters at most
  • Shown when: resource is cell and cellOperation is one of cell.write
  • Expressions: {{ }} accepted

text ​

Text to append — Accepts {{ }} expressions: {{ now }} — {{ data.categorize_1.category }}. What the cell already holds is kept.

  • Type: Long text (text)
  • Required: No
  • Default: "" (empty)
  • 4000 characters at most
  • Shown when: resource is cell and cellOperation is one of cell.append
  • Expressions: {{ }} accepted

separator ​

Separator

  • Type: One choice (options)
  • Required: No
  • Default: newline
  • Options:
    • newline — A new line: The case of a comment history.
    • space — A space: To stay on a single line.
    • semicolon — A semicolon: For a list on a single line.
  • Shown when: resource is cell and cellOperation is one of cell.append

limit ​

Maximum rows

  • Type: Number (number)
  • Required: No
  • Default: 50
  • Whole number, from 1 to 500
  • Shown when: resource is table and tableOperation is one of table.read

offset ​

Rows to skip — The pagination: 0 for the first page, then the total already read.

  • Type: Number (number)
  • Required: No
  • Default: 0
  • Whole number, from 0 to 1000000
  • Shown when: resource is table and tableOperation is one of table.read

session ​

Open a workbook session — Ticked (recommended), the step calls share one session: it is faster, and they all see the same workbook state.

  • Type: Yes / no (boolean)
  • Required: No
  • Default: true

Outputs ​

  • main

Data produced ​

What this node adds to the run data, and how to read it in an expression. <step> stands for the step key: the node name turned into an identifier (see Data and expressions).

  • {{ data.<step>.sheets }} — array of { id, name, position, visible }. sheet.list: the worksheets of the workbook, in their order. visible is false for a hidden worksheet.
  • {{ data.<step>.names }} — array of string. sheet.list: the worksheet names, in order.
  • {{ data.<step>.tables }} — array of { id, name, worksheet?, headers }. table.list: the named tables, each with its header row. worksheet is only present when a worksheet was chosen.
  • {{ data.<step>.headers }} — array of string. table.read: the table's column headers, in order.
  • {{ data.<step>.rows }} — array of object. table.read: the rows read, each as an object whose keys are the column headers and whose values are the cell texts.
  • {{ data.<step>.rows.0.<header> }} — string. table.read: the value of one column in the first row read. Only reachable this way when the header is made of letters, digits, _ and $.
  • {{ data.<step>.truncated }} — boolean. table.read: true when more rows remain after the ones returned.
  • {{ data.<step>.nextOffset }} — number. table.read: the value to put in Rows to skip to read the next page.
  • {{ data.<step>.added }} — number. table.add: 1 when the row was added, 0 when the key value was already in the table.
  • {{ data.<step>.duplicates }} — number. table.add: 1 when the row was not added because the Matching column already held its value, 0 otherwise.
  • {{ data.<step>.found }} — boolean. table.update, table.delete: true when a row with the key value was found and changed or deleted, false when none was found (nothing was written).
  • {{ data.<step>.index }} — number. table.update, table.delete: the position of the row in the table (0 is the first row under the headers). -1 when not found and in a test run.
  • {{ data.<step>.address }} — string. range.read, range.write, cell.read, cell.write, cell.append: the address read or written, for example Tracker!A1:D20 or C12.
  • {{ data.<step>.values }} — array of array of string. range.read: the cell texts, row by row. values.0.1 is row 1, column 2 of the range.
  • {{ data.<step>.rowCount }} — number. range.read: the number of rows in the range.
  • {{ data.<step>.columnCount }} — number. range.read: the number of columns in the range.
  • {{ data.<step>.cells }} — number. range.write: the number of cells written.
  • {{ data.<step>.value }} — string. cell.read: the cell content. cell.write: the value written. cell.append: the whole cell content after the append.
  • {{ data.<step>.count }} — number. sheet.list, table.list, table.read: the number of entries returned.
  • {{ data.<step>.summary }} — string. A readable sentence describing what the step did.
  • {{ data.<step>.simulated }} — boolean. true when the step ran in a test run and the write was only described — the same field as on the Google and Outlook nodes. Always false for a read.

Resources and actions ​

Set resource, then the action parameter of that resource. On SharePoint, the worksheet and the table are picked from lists (sheet, table); on OneDrive, you type their names (sheetName, tableName).

ResourceAction parameterValueFields usedData produced
sheetsheetOperationsheet.list—sheets, count, names
tabletableOperationtable.listworksheet (optional)tables, count
tabletableOperationtable.readtable, limit, offsetheaders, rows, count, truncated, nextOffset
tabletableOperationtable.addtable, values, keyColumnadded, duplicates
tabletableOperationtable.updatetable, keyColumn, keyValue, valuesfound, index
tabletableOperationtable.deletetable, keyColumn, keyValuefound, index
rangerangeOperationrange.readworksheet, addressaddress, values, rowCount, columnCount
rangerangeOperationrange.writeworksheet, address, rowsaddress, cells
cellcellOperationcell.readworksheet, addressaddress, value
cellcellOperationcell.writeworksheet, address, valueaddress, value
cellcellOperationcell.appendworksheet, address, text, separatoraddress, value
  • Tables first. A tracker is almost always a named table (Table Design › Table Name in Excel). Table actions address rows by the value of a column, never by a row number, because a row number changes as soon as someone sorts the table.
  • table.read returns at most Maximum rows (1 to 500, 50 by default) starting after Rows to skip; read the next page with Rows to skip set to nextOffset.
  • table.add appends one row. In Columns to write (values), each key is a column header exactly as written in the table; columns you leave out stay empty, and a key that matches no header is ignored. With a Matching column, the row is only added if its value for that column is not already in the table.
  • table.update finds the first row whose Matching column equals Value to match, then writes the columns given; the other columns keep their value. table.delete removes that row. When no row matches, nothing is written and found is false: the step does not fail.
  • range.read reads a rectangle (A1:D20); with Address left empty, it reads the whole used area of the worksheet. range.write requires an address: Values (rows) takes one line per row with cells separated by semicolons or tabs, or a JSON array such as [["a","b"],["c","d"]].
  • cell.write replaces a cell's content. cell.append adds Text to append after what the cell already holds, separated by a new line (newline, default), a space (space) or ; (semicolon).
  • Workbook session. Open a workbook session (on by default) makes the calls of the step share one session: faster, and all of them see the same state of the workbook. The session is closed at the end of the step.

Example ​

A sales tracker lives on the Sales SharePoint site, in a table Tracker whose headers include Matter, Client, Status and Signing date. An Extract step named Extract reads the matter number and the client.

Step New matter, when a new case arrives:

location: sharepoint
site: (url mode) https://contoso.sharepoint.com/sites/Sales
library: (list mode) Documents
workbook: (list mode) Sales tracker.xlsx
resource: table
tableOperation: table.add
table: (list mode) Tracker
values:
  Matter: {{ data.extract.matter }}
  Client: {{ data.extract.client }}
  Status: Open
keyColumn: Matter

Data: { "added": 1, "duplicates": 0 }. If the same matter comes again, nothing is added and the data reads { "added": 0, "duplicates": 1 }.

Step Signed, when the signing confirmation arrives:

resource: table
tableOperation: table.update
table: (list mode) Tracker
keyColumn: Matter
keyValue: {{ data.extract.matter }}
values:
  Status: Signed
  Signing date: {{ data.extract.date }}

Data: { "found": true, "index": 41 }.

Tips ​

  • Replays. table.update, range.write and cell.write write the same thing again on a replay, which is harmless. table.add is only protected with a Matching column: without one, a replay adds a second row. cell.append does not append if the cell already ends with exactly the same text, so a replay adds nothing; the flip side is that appending the very same text twice in a row is skipped too, which a timestamp in the text avoids.
  • Unique keys. Update and delete act on the first matching row. Keep the Matching column unique: with two rows sharing a key, a replayed table.delete would remove the second one.
  • Exact names. Column headers and key values are compared exactly, case included (only the surrounding spaces of Matching column and Value to match are removed). A Matching column that is not a header of the table fails with microsoft.rejected. The search for a key stops after 5,000 rows (microsoft.rejected): filter upstream or split the table.
  • Formulas in updated rows. table.update rewrites the whole row with the values it has just read plus yours. A cell of that row that held a formula is written back as its displayed value.
  • Values are typed in. Excel reads dates and numbers according to the cell format, as if typed by hand.
  • Range size. For range.write, give an address with the same number of rows and columns as the block of values; Excel refuses a mismatch (microsoft.rejected).
  • Missing fields. No workbook, worksheet or table, or an empty Columns to write, Values, Address, Matching column, Value to match or Text to append fails with node_invalid_param, naming the field. On SharePoint, a workbook without a document library gives microsoft.rejected.
  • Test runs. In test runs reads run for real (worksheets, tables, rows, ranges, cells). Writes are only described: table.add reports the row as added without checking for duplicates, table.update and table.delete report found: true with index: -1, and cell.append really reads the cell and returns the content it would have.
  • Errors. credential.capability_missing: the capability matching Where the workbook lives (SharePoint or Files) is not connected for the member running the workflow. microsoft.locked: the workbook is locked by another editor; retried automatically. microsoft.access_denied: reconnect the account or check rights on the site. microsoft.not_found: the workbook, worksheet or table does not exist. microsoft.unavailable is retried automatically. See Error handling.