Install
openclaw skills install rolex-maybeai-sheetMaybeAI Sheet skill for full Excel/spreadsheet lifecycle management. Upload, read, edit, and analyze Excel files via the MaybeAI platform. Use when the user wants to: upload or import an Excel file, read spreadsheet data, update cell ranges, insert/delete rows or columns, manage worksheets, add charts or images, apply filters or conditional formatting, calculate formulas, export files, manage versions, or perform any Excel data operation.
openclaw skills install rolex-maybeai-sheetFull Excel/spreadsheet lifecycle management powered by the MaybeAI platform. Upload files, read and write data, manage worksheets, add charts, apply formatting, and more — all via natural language.
Ready-to-run curl examples are in the scripts/ folder. Each script reads credentials from environment variables — no hardcoded tokens.
export MAYBEAI_API_TOKEN=your_token_here
export DOC_ID=your_document_id_here # needed by most scripts
bash scripts/01-file-management.sh # upload, import, list, rename, delete, export
bash scripts/02-read-data.sh # read sheet, list worksheets, versions
bash scripts/03-write-data.sh # update range, append rows, copy range
bash scripts/04-rows-columns.sh # insert/delete/move rows & columns, widths/heights
bash scripts/05-worksheets.sh # create, rename, move, duplicate, delete worksheets
bash scripts/06-formulas.sh # calc single/batch formulas, recalculate all
bash scripts/07-charts-pictures.sh # add/edit/delete charts and pictures
bash scripts/08-formatting.sh # freeze panes, auto filter, conditional formats
bash scripts/09-end-to-end.sh # 3 complete workflow examples (upload→edit→export)
Requires:
curlandjq. Install jq withbrew install jq(macOS) orapt install jq(Linux).
export MAYBEAI_API_TOKEN=your_token_here
| Variable | Description |
|---|---|
MAYBEAI_API_TOKEN | Your MaybeAI Bearer token. Get it from maybe.ai/user/my-plan. |
https://play-be.omnimcp.ai
All authenticated endpoints require the header:
Authorization: Bearer <MAYBEAI_API_TOKEN>
| User says | Action |
|---|---|
| "Upload this Excel file" | POST /api/v1/excel/upload |
| "Import from URL" | POST /api/v1/excel/import_by_url |
| "Read Sheet1 data" | POST /api/v1/excel/read_sheet |
| "List my files" | POST /api/v1/excel/list_files |
| "List worksheets" | POST /api/v1/excel/list_worksheets |
| "Update cells A1:B3" | POST /api/v1/excel/update_range |
| "Append new rows" | POST /api/v1/excel/append_rows |
| "Insert 2 rows at row 5" | POST /api/v1/excel/insert_rows |
| "Delete rows 3–5" | POST /api/v1/excel/delete_rows |
| "Add a new worksheet" | POST /api/v1/excel/write_new_worksheet |
| "Add a bar chart" | POST /api/v1/excel/add_chart |
| "Freeze the header row" | POST /api/v1/excel/freeze_panes |
| "Add auto filter" | POST /api/v1/excel/set_auto_filter |
| "Calculate formula =SUM(A1:A10)" | POST /api/v1/excel/calc_formulas |
| "Export/download the file" | GET /api/v1/excel/export/{document_id} |
| "Copy this spreadsheet" | POST /api/v1/excel/copy_excel |
POST /api/v1/excel/upload
Content-Type: multipart/form-data
file: <xlsx file>
user_id: (optional)
Returns { document_id, uri, ... }. Use document_id (also called uri) in all subsequent calls.
POST /api/v1/excel/import_by_url
Authorization: Bearer <token>
{ "url": "https://..." }
Downloads the file from the URL into MaybeAI storage. Returns document_id.
POST /api/v1/excel/list_files
Authorization: Bearer <token>
{}
POST /api/v1/excel/search_files
Authorization: Bearer <token>
{ "keyword": "sales" }
POST /api/v1/excel/rename_file
Authorization: Bearer <token>
{ "uri": "<document_id>", "name": "new_name.xlsx" }
POST /api/v1/excel/delete_file
Authorization: Bearer <token>
{ "uri": "<document_id>" }
GET /api/v1/excel/export/{document_id}
Returns the raw .xlsx file.
POST /api/v1/excel/download
{ "uri": "<document_id>" }
POST /api/v1/excel/copy_excel
Authorization: Bearer <token>
{ "uri": "<document_id>" }
GET /api/v1/excel/spreadsheets/{doc_id}?gid=<sheet_index>
Returns spreadsheet data as JSON. gid selects the worksheet (0-indexed).
GET /api/v1/excel/spreadsheets/d/{doc_id}
Returns an HTML preview of the spreadsheet.
POST /api/v1/excel/list_worksheets
{ "uri": "<document_id>" }
POST /api/v1/excel/read_sheet
{ "uri": "<document_id>", "sheet": "Sheet1" }
Returns all cell data from the specified worksheet.
POST /api/v1/excel/read_headers
{ "uri": "<document_id>", "sheet": "Sheet1" }
POST /api/v1/excel/list_versions
{ "uri": "<document_id>" }
POST /api/v1/excel/read_version
{ "uri": "<document_id>", "version": "<version_id>" }
POST /api/v1/excel/update_range
Authorization: Bearer <token>
{
"uri": "<document_id>",
"sheet": "Sheet1",
"range": "A1:B3",
"values": [["Name", "Score"], ["Alice", 95], ["Bob", 87]]
}
POST /api/v1/excel/update_range_by_lookup
Authorization: Bearer <token>
{
"uri": "<document_id>",
"sheet": "Sheet1",
"lookup_column": "ID",
"lookup_value": "001",
"updates": { "Status": "Done" }
}
POST /api/v1/excel/clear_range
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "range": "A1:D10" }
POST /api/v1/excel/append_rows
Authorization: Bearer <token>
{
"uri": "<document_id>",
"sheet": "Sheet1",
"rows": [["Alice", 95], ["Bob", 87]]
}
POST /api/v1/excel/write_new_sheet
Authorization: Bearer <token>
{
"uri": "<document_id>",
"sheet": "Summary",
"data": [["Col1", "Col2"], [1, 2], [3, 4]]
}
POST /api/v1/excel/copy_range_with_formulas
Authorization: Bearer <token>
{
"uri": "<document_id>",
"sheet": "Sheet1",
"src_range": "A1:D10",
"dst_range": "F1"
}
POST /api/v1/excel/copy_range_by_lookup
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "lookup_column": "ID", "lookup_value": "001", "dst_sheet": "Archive" }
POST /api/v1/excel/insert_rows
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "row": 3, "count": 2 }
Inserts count blank rows starting at row (1-indexed).
POST /api/v1/excel/delete_rows
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "row": 3, "count": 2 }
POST /api/v1/excel/move_row
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "from_row": 5, "to_row": 2 }
POST /api/v1/excel/move_rows
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "rows": [5, 6], "to_row": 2 }
POST /api/v1/excel/undo_delete_rows
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1" }
POST /api/v1/excel/insert_columns
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "column": "C", "count": 1 }
POST /api/v1/excel/delete_columns
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "column": "C", "count": 1 }
POST /api/v1/excel/move_column
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "from_column": "E", "to_column": "B" }
POST /api/v1/excel/move_columns
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "columns": ["E", "F"], "to_column": "B" }
POST /api/v1/excel/undo_delete_columns
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1" }
POST /api/v1/excel/add_header_columns
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "columns": ["NewCol1", "NewCol2"] }
POST /api/v1/excel/set_columns_width
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "columns": [{"column": "A", "width": 20}] }
POST /api/v1/excel/set_rows_height
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "rows": [{"row": 1, "height": 30}] }
POST /api/v1/excel/write_new_worksheet
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "NewSheet", "data": [["A", "B"], [1, 2]] }
POST /api/v1/excel/delete_worksheet
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "OldSheet" }
POST /api/v1/excel/rename_worksheet
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "new_name": "Sales" }
POST /api/v1/excel/move_worksheet
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Summary", "position": 0 }
POST /api/v1/excel/copy_worksheet
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "new_name": "Sheet1_copy" }
POST /api/v1/excel/list_worksheets_version
{ "uri": "<document_id>" }
POST /api/v1/excel/calc-formula
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "formula": "=SUM(A1:A10)" }
POST /api/v1/excel/calc_formulas
Authorization: Bearer <token>
{
"uri": "<document_id>",
"sheet": "Sheet1",
"formulas": [
{ "cell": "B11", "formula": "=SUM(B1:B10)" },
{ "cell": "C11", "formula": "=AVERAGE(C1:C10)" }
]
}
POST /api/v1/excel/recalculate_formulas
Authorization: Bearer <token>
{ "uri": "<document_id>" }
POST /api/v1/excel/add_chart
Authorization: Bearer <token>
{
"uri": "<document_id>",
"worksheet_name": "Sheet1",
"cell": "E2",
"chart": {
"type": "bar",
"series": [{ "name": "Sales", "categories": "Sheet1!A2:A10", "values": "Sheet1!B2:B10" }],
"title": { "name": "Monthly Sales" }
}
}
Supported chart types: line, bar, col, pie, scatter, area, doughnut, radar.
POST /api/v1/excel/set_chart
Authorization: Bearer <token>
{ "uri": "<document_id>", "worksheet_name": "Sheet1", "chart_id": 1, "chart": { ... } }
POST /api/v1/excel/delete_chart
Authorization: Bearer <token>
{ "uri": "<document_id>", "worksheet_name": "Sheet1", "chart_id": 1 }
POST /api/v1/excel/add_picture
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "cell": "D2", "picture_url": "https://..." }
POST /api/v1/excel/read_picture
{ "uri": "<document_id>", "sheet": "Sheet1" }
POST /api/v1/excel/delete_picture
Authorization: Bearer <token>
{ "uri": "<document_id>", "sheet": "Sheet1", "picture_id": 1 }
POST /api/v1/excel/freeze_panes
Authorization: Bearer <token>
{
"uri": "<document_id>",
"worksheet_name": "Sheet1",
"freeze_rows": 1,
"freeze_columns": 0
}
Set freeze_rows: 1 to lock the header row while scrolling.
POST /api/v1/excel/set_auto_filter
Authorization: Bearer <token>
{
"uri": "<document_id>",
"worksheet_name": "Sheet1",
"auto_filter": {
"ref": "A1:F100",
"filter_columns": []
}
}
POST /api/v1/excel/remove_auto_filter
Authorization: Bearer <token>
{ "uri": "<document_id>", "worksheet_name": "Sheet1" }
POST /api/v1/excel/set_conditional_formats
Authorization: Bearer <token>
{
"uri": "<document_id>",
"worksheet_name": "Sheet1",
"formats": [
{
"sqref": "B2:B100",
"type": "cell",
"criteria": ">",
"value": "90",
"format": { "font": { "color": "FF0000" } }
}
]
}
1. Upload: POST /api/v1/excel/upload → get document_id
2. List sheets: POST /api/v1/excel/list_worksheets {"uri": "<document_id>"}
3. Read data: POST /api/v1/excel/read_sheet {"uri": "<document_id>", "sheet": "Sheet1"}
1. Upload an empty template or import existing file
2. Write data: POST /api/v1/excel/update_range
3. Add header freeze: POST /api/v1/excel/freeze_panes {"freeze_rows": 1}
4. Add auto filter: POST /api/v1/excel/set_auto_filter
5. Add summary chart: POST /api/v1/excel/add_chart
6. Export: GET /api/v1/excel/export/{document_id}
1. Find file: POST /api/v1/excel/search_files {"keyword": "sales"}
2. Read current data: POST /api/v1/excel/read_sheet
3. Update changed rows: POST /api/v1/excel/update_range_by_lookup
4. Recalculate: POST /api/v1/excel/recalculate_formulas
1. Identify document_id (list_files or upload)
2. Append new rows: POST /api/v1/excel/append_rows
3. Read back to verify: POST /api/v1/excel/read_sheet
uri / document_id: These terms are interchangeable throughout the API. The value returned from /upload or /import_by_url is used as uri in all body parameters.A1, A1:B10, A:A.A, B, ...).AUTH require Authorization: Bearer <MAYBEAI_API_TOKEN>. Public endpoints work without a token.maybe.ai/docs/spreadsheets/d/{doc_id} renders a live HTML preview of the file.