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

# Microsoft Excel Integration for AI Agents & Workflows

> Read, write, and manage Excel workbooks stored in OneDrive via the Microsoft Graph API.

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/df8MOr-hXotYLTh5/logos/microsoft-excel.svg?fit=max&auto=format&n=df8MOr-hXotYLTh5&q=85&s=166f3c6a6e59a7693ee763380fff9b58" alt="Microsoft Excel logo" width="72" height="72" data-path="logos/microsoft-excel.svg" />

## Overview

Add **Microsoft Excel** to any ModuleX agent or workflow. Read, write, and manage Excel workbooks stored in OneDrive via the Microsoft Graph REST API (`graph.microsoft.com/v1.0`).

<Info>
  **Categories**: Productivity & Collaboration · Spreadsheets · **Auth**: Microsoft OAuth 2.0 · **Actions**: 9
</Info>

## Authentication

### Microsoft OAuth 2.0

Connect to Microsoft Excel via Microsoft Identity Platform OAuth (recommended). Requires consent to access OneDrive files.

#### Required Credentials

| Field         | Description                                          | Required | Format                                     |
| ------------- | ---------------------------------------------------- | -------- | ------------------------------------------ |
| Client ID     | Microsoft Entra ID (Azure AD) application Client ID. | Yes      | `00000000-0000-0000-0000-000000000000`     |
| Client Secret | Microsoft Entra ID application Client Secret value.  | Yes      | `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` |

#### OAuth Configuration

* **Authorization URL**: `https://login.microsoftonline.com/common/oauth2/v2.0/authorize`
* **Token URL**: `https://login.microsoftonline.com/common/oauth2/v2.0/token`
* **Scopes**: `Files.ReadWrite`, `User.Read`, `offline_access`

## Available Actions

<AccordionGroup>
  <Accordion title="add_a_worksheet_tablerow — Adds rows to the end of a specific Excel table. Provide either tableId or tableName.">
    ### Parameters

    <ResponseField name="sheet_id" type="string" required>
      Drive item ID of the workbook (the spreadsheet file) in OneDrive.
    </ResponseField>

    <ResponseField name="values" type="array" required>
      Two-dimensional array of unformatted row values, e.g. \[\[1, 2, 3], \[4, 5, 6]]. Each inner array is one row.
    </ResponseField>

    <ResponseField name="table_id" type="string">
      ID of the workbook table to append to. Provide either table\_id or table\_name.
    </ResponseField>

    <ResponseField name="table_name" type="string">
      Name of the workbook table (set in the Table Design tab). Used when table\_id is not available, e.g. for personal accounts.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "TableRow": {
          "additionalProperties": false,
          "description": "One Microsoft Graph workbookTableRow returned by table operations.",
          "properties": {
            "index": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Index"
            },
            "values": {
              "items": {
                "items": {},
                "type": "array"
              },
              "title": "Values",
              "type": "array"
            }
          },
          "title": "TableRow",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "row": {
          "anyOf": [
            {
              "$ref": "#/$defs/TableRow"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "success"
      ],
      "title": "AddAWorksheetTablerowOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="add_row — Insert a new row at the end of the used range of an Excel worksheet.">
    ### Parameters

    <ResponseField name="sheet_id" type="string" required>
      Drive item ID of the workbook in OneDrive.
    </ResponseField>

    <ResponseField name="worksheet" type="string" required>
      Name of the worksheet to append the row to.
    </ResponseField>

    <ResponseField name="values" type="array" required>
      Array of cell values for the new row, e.g. \[1, 2, 3]. Each item is one cell.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "address": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Address"
        },
        "values": {
          "items": {
            "items": {},
            "type": "array"
          },
          "title": "Values",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "AddRowOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="find_row — Find the first row in an Excel worksheet where the given column contains the given value.">
    ### Parameters

    <ResponseField name="sheet_id" type="string" required>
      Drive item ID of the workbook in OneDrive.
    </ResponseField>

    <ResponseField name="worksheet" type="string" required>
      Name of the worksheet to search.
    </ResponseField>

    <ResponseField name="column" type="string" required>
      Column letter to search, e.g. 'A'.
    </ResponseField>

    <ResponseField name="value" type="string" required>
      Value to search for. Numeric strings will also be matched as numbers.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "found": {
          "default": false,
          "title": "Found",
          "type": "boolean"
        },
        "row_number": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Row Number"
        },
        "address": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Address"
        },
        "values": {
          "items": {
            "items": {},
            "type": "array"
          },
          "title": "Values",
          "type": "array"
        },
        "column_values": {
          "items": {},
          "title": "Column Values",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "FindRowOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_columns — Get all values in the requested columns of an Excel worksheet's used range.">
    ### Parameters

    <ResponseField name="sheet_id" type="string" required>
      Drive item ID of the workbook in OneDrive.
    </ResponseField>

    <ResponseField name="worksheet" type="string" required>
      Name of the worksheet to read.
    </ResponseField>

    <ResponseField name="columns" type="array" required>
      Array of column letters to retrieve, e.g. \['A', 'C'].
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "values": {
          "additionalProperties": {
            "items": {},
            "type": "array"
          },
          "title": "Values",
          "type": "object"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetColumnsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_spreadsheet — Get the values of the specified range (or the entire used range) of an Excel worksheet.">
    ### Parameters

    <ResponseField name="sheet_id" type="string" required>
      Drive item ID of the workbook in OneDrive.
    </ResponseField>

    <ResponseField name="worksheet" type="string" required>
      Name of the worksheet to read.
    </ResponseField>

    <ResponseField name="range" type="string">
      Range within the worksheet, e.g. 'A1:C4'. If omitted, the entire used range is returned.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "address": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Address"
        },
        "row_count": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Row Count"
        },
        "column_count": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Column Count"
        },
        "values": {
          "items": {
            "items": {},
            "type": "array"
          },
          "title": "Values",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetSpreadsheetOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_table_rows — Retrieve all rows from a specified table in an Excel worksheet.">
    ### Parameters

    <ResponseField name="sheet_id" type="string" required>
      Drive item ID of the workbook in OneDrive.
    </ResponseField>

    <ResponseField name="table_id" type="string" required>
      ID of the workbook table whose rows you want.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "TableRow": {
          "additionalProperties": false,
          "description": "One Microsoft Graph workbookTableRow returned by table operations.",
          "properties": {
            "index": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Index"
            },
            "values": {
              "items": {
                "items": {},
                "type": "array"
              },
              "title": "Values",
              "type": "array"
            }
          },
          "title": "TableRow",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "rows": {
          "items": {
            "$ref": "#/$defs/TableRow"
          },
          "title": "Rows",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetTableRowsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_folder_id_options — List OneDrive folders the user can browse to pick a workbook location. Returns label/value pairs suitable for a folder picker.">
    ### Parameters

    <ResponseField name="max_pages" type="integer">
      Maximum number of batch pages to fetch (1-500). Default 50.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "FolderOption": {
          "additionalProperties": false,
          "description": "One folder option returned by list_folder_id_options.",
          "properties": {
            "value": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Value"
            },
            "label": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Label"
            }
          },
          "title": "FolderOption",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "options": {
          "items": {
            "$ref": "#/$defs/FolderOption"
          },
          "title": "Options",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListFolderIdOptionsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="update_cell — Update the value of a specific cell in an Excel worksheet.">
    ### Parameters

    <ResponseField name="sheet_id" type="string" required>
      Drive item ID of the workbook in OneDrive.
    </ResponseField>

    <ResponseField name="worksheet" type="string" required>
      Name of the worksheet containing the cell.
    </ResponseField>

    <ResponseField name="cell" type="string" required>
      Cell address to update, e.g. 'A1'.
    </ResponseField>

    <ResponseField name="value" type="string" required>
      Value to write to the cell.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "address": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Address"
        },
        "values": {
          "items": {
            "items": {},
            "type": "array"
          },
          "title": "Values",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "UpdateCellOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="update_worksheet_tablerow — Update the values of an existing row in an Excel workbook table (work or school accounts only).">
    ### Parameters

    <ResponseField name="sheet_id" type="string" required>
      Drive item ID of the workbook in OneDrive.
    </ResponseField>

    <ResponseField name="table_id" type="string" required>
      ID of the workbook table.
    </ResponseField>

    <ResponseField name="row_id" type="integer" required>
      Zero-based index of the row to update.
    </ResponseField>

    <ResponseField name="values" type="array" required>
      Array of cell values for the updated row, e.g. \[1, 2, 3]. Each item is one cell.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "TableRow": {
          "additionalProperties": false,
          "description": "One Microsoft Graph workbookTableRow returned by table operations.",
          "properties": {
            "index": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Index"
            },
            "values": {
              "items": {
                "items": {},
                "type": "array"
              },
              "title": "Values",
              "type": "array"
            }
          },
          "title": "TableRow",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "row": {
          "anyOf": [
            {
              "$ref": "#/$defs/TableRow"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "success"
      ],
      "title": "UpdateWorksheetTablerowOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* **Microsoft Graph throttling**: Graph applies per-app and per-user
  throttling. Excessive requests return HTTP `429` with a
  `Retry-After` header. See
  [https://learn.microsoft.com/en-us/graph/throttling](https://learn.microsoft.com/en-us/graph/throttling) for current
  limits.
* **Workbook session limits**: Excel workbook APIs apply additional
  per-workbook session throttling; consider batching writes via
  `add_a_worksheet_tablerow` rather than per-cell `update_cell` calls
  when possible.
* **Table updates** (`update_worksheet_tablerow`): work or school
  Microsoft accounts only. Personal accounts cannot enumerate or
  update workbook tables.
* **Error model**: non-2xx responses and timeouts are caught and
  returned as `success=False` + `error` rather than raising. Plan for
  retries on the agent side based on the error string.

## Related integrations

<CardGroup cols={3}>
  <Card title="Cal.com" href="/integrations/tools/cal-com" />

  <Card title="Canva" href="/integrations/tools/canva" />

  <Card title="ConvertAPI" href="/integrations/tools/convertapi" />
</CardGroup>

## Links

* [Microsoft Excel](https://www.microsoft.com/en-us/microsoft-365/excel)
