> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreflux.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Excel Online

> Client-mode REST API connector for Excel workbooks in OneDrive and SharePoint through Microsoft Graph: sessions plus table rows and range read and write

Technical Preview

## Overview

Client-mode REST API connector for Excel workbooks in OneDrive and SharePoint through Microsoft Graph: sessions plus table rows and range read and write. `BASE_ADDRESS` defaults to `https://graph.microsoft.com`. Topics use `data/excel-online/<object>/<verb>`.

| Event | Request | Source topic |
| - | - | - |
| `SessionCreate` | `POST /v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/createSession` | `data/excel-online/sessions/create` |
| `SessionClose` | `POST /v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/closeSession` | `data/excel-online/sessions/close` |
| `WorksheetsList` | `GET /v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/worksheets` | `data/excel-online/worksheets/list` |
| `TablesList` | `GET /v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/tables` | `data/excel-online/tables/list` |
| `TableRowsList` | `GET /v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/tables/{value.json.table}/rows?$top={value.json.top}&$skip={value.json.skip}` | `data/excel-online/tables/rows/list` |
| `TableRowsAdd` | `POST /v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/tables/{value.json.table}/rows` | `data/excel-online/tables/rows/add` |
| `RangeGet` | `GET /v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/worksheets/{value.json.sheet}/range(address='{value.json.address}')` | `data/excel-online/ranges/get` |
| `RangeUpdate` | `PATCH /v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/worksheets/{value.json.sheet}/range(address='{value.json.address}')` | `data/excel-online/ranges/update` |

## Authentication

Microsoft Entra ID OAuth 2.0 access token for Microsoft Graph (Files.ReadWrite or Files.ReadWrite.All / Sites.ReadWrite.All for app-only) in Authorization: Bearer \{value.json.access\_token}. Get the token from login.microsoftonline.com upstream (see the SharePoint and OneDrive connector).

> [!WARNING]
>
> Keep credentials in broker secrets and never retain topics that carry tokens or client secrets.

## Notes

* Only .xlsx files in OneDrive for Business or SharePoint are supported by the Graph workbook API.
* workbook-session-id is optional; send an empty string to work sessionless, or create a persistent session with SessionCreate (body \{"persistChanges":true}) for many writes.
* RangeGet / RangeUpdate use range(address='A1:D10'); pass sheet and address in the payload.

## Basic Syntax

```lot wrap theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
DEFINE ROUTE ExcelOnlineRestApi WITH TYPE REST_API
    ADD REST_API_CONFIG
        WITH BASE_ADDRESS "https://graph.microsoft.com"
        WITH ENABLE_CLIENT "true"
        WITH USE_SSL "true"
        WITH REQUEST_TIMEOUT '60'
        WITH DEFAULT_CONTENT_TYPE "application/json"
    ADD EVENT SessionCreate
        WITH SOURCE_TOPIC "data/excel-online/sessions/create"
        WITH DESTINATION_TOPIC "data/excel-online/sessions/create/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/createSession"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Content-Type" "application/json"
            ADD "Authorization" "Bearer {value.json.access_token}"
        WITH BODY "{value.json.body}"
    ADD EVENT SessionClose
        WITH SOURCE_TOPIC "data/excel-online/sessions/close"
        WITH DESTINATION_TOPIC "data/excel-online/sessions/close/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/closeSession"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Content-Type" "application/json"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "workbook-session-id" "{value.json.session_id}"
        WITH BODY ""
    ADD EVENT WorksheetsList
        WITH SOURCE_TOPIC "data/excel-online/worksheets/list"
        WITH DESTINATION_TOPIC "data/excel-online/worksheets/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/worksheets"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "workbook-session-id" "{value.json.session_id}"
    ADD EVENT TablesList
        WITH SOURCE_TOPIC "data/excel-online/tables/list"
        WITH DESTINATION_TOPIC "data/excel-online/tables/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/tables"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "workbook-session-id" "{value.json.session_id}"
    ADD EVENT TableRowsList
        WITH SOURCE_TOPIC "data/excel-online/tables/rows/list"
        WITH DESTINATION_TOPIC "data/excel-online/tables/rows/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/tables/{value.json.table}/rows?$top={value.json.top}&$skip={value.json.skip}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "workbook-session-id" "{value.json.session_id}"
    ADD EVENT TableRowsAdd
        WITH SOURCE_TOPIC "data/excel-online/tables/rows/add"
        WITH DESTINATION_TOPIC "data/excel-online/tables/rows/add/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/tables/{value.json.table}/rows"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Content-Type" "application/json"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "workbook-session-id" "{value.json.session_id}"
        WITH BODY "{value.json.body}"
    ADD EVENT RangeGet
        WITH SOURCE_TOPIC "data/excel-online/ranges/get"
        WITH DESTINATION_TOPIC "data/excel-online/ranges/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/worksheets/{value.json.sheet}/range(address='{value.json.address}')"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "workbook-session-id" "{value.json.session_id}"
    ADD EVENT RangeUpdate
        WITH SOURCE_TOPIC "data/excel-online/ranges/update"
        WITH DESTINATION_TOPIC "data/excel-online/ranges/update/response"
        WITH METHOD "PATCH"
        WITH ENDPOINT "/v1.0/drives/{value.json.driveId}/items/{value.json.itemId}/workbook/worksheets/{value.json.sheet}/range(address='{value.json.address}')"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Content-Type" "application/json"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "workbook-session-id" "{value.json.session_id}"
        WITH BODY "{value.json.body}"
```

## Sources

* [https://learn.microsoft.com/en-us/graph/api/resources/excel](https://learn.microsoft.com/en-us/graph/api/resources/excel)
* [https://learn.microsoft.com/en-us/graph/api/workbook-createsession](https://learn.microsoft.com/en-us/graph/api/workbook-createsession)
* [https://learn.microsoft.com/en-us/graph/api/table-post-rows](https://learn.microsoft.com/en-us/graph/api/table-post-rows)
* [https://learn.microsoft.com/en-us/graph/api/tablerow-list](https://learn.microsoft.com/en-us/graph/api/tablerow-list)
* [https://learn.microsoft.com/en-us/graph/api/range-get](https://learn.microsoft.com/en-us/graph/api/range-get)
* [https://learn.microsoft.com/en-us/graph/api/range-update](https://learn.microsoft.com/en-us/graph/api/range-update)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.