---
title: Create editable Excel, PowerPoint and Word files
description: Create populated native workbooks and decks, reuse Office templates, link editable chart data and continue with returned revisions and addresses.
order: 13
---

# Create editable Excel, PowerPoint and Word files

Use FileHop's native creation tools when the user needs a document they can continue editing. `sheet_create` can create populated grids; `deck_create` can build slides with native objects; `document_create` writes a Word document from Markdown or a structured outline. The current source also returns revisions and native outlines for follow-up edits, so the agent can work from actual cell, slide, shape or block addresses.

Check [the installed MCP schemas](/docs/mcp/) before calling. These examples describe the reviewed source; an older download may expose only blank/template creation.

## Build a workbook with real tables

Use `sheet_create` with `directory`, `name` (without extension) and a short `summary`. Pass top-level `columns`, `rows` and optionally `sheet_name`, or use `sheets: [{name, columns, rows}]` for multiple sheets in order. For example:

```json
{
  "directory": "/Users/me/Shared/Outputs",
  "name": "Pipeline",
  "summary": "Create the quarterly pipeline workbook",
  "sheet_name": "Sales Pipeline",
  "columns": ["Account", {"header": "Close date", "numberFormat": "yyyy-mm-dd"}, {"header": "Amount", "numberFormat": "$#,##0.00"}],
  "rows": [["0012", {"date": "2025-01-15"}, 12500], ["0074", {"date": "2025-01-16"}, 9800]]
}
```

Headers are written literally, bold and frozen. With headers, FileHop creates a native Excel table with filters. Ragged rows can be padded with blanks; a row wider than the headers is refused. Column widths are fitted within bounds, and long text wraps rather than forcing arbitrarily wide columns. Use the exact table name from the returned `outline` for later filtering, sorting and chart sources; names are derived from sheet names, so do not guess them.

- **Types:** JSON numbers, booleans and null are distinct from strings. Keep identifiers and leading zeros in strings. Supply identifiers with more digits than Excel can store exactly as text. Unsafe integer inputs can be refused to prevent silent rounding.
- **Dates and formulas:** `{"date":"2025-01-15"}` writes an Excel date. `parse_dates: true` also interprets valid ISO date strings in XLSX; it is opt-in and `raw: true` keeps strings literal. Strings starting with `=` normally become formulas in XLSX. Check formula errors returned with the created workbook before presenting it.
- **Notes and dropdowns:** Initialize `notes` with cell/text and optional author; use `dropdowns` with a target range and either inline `items` or a one-row/one-column `source` range, including a qualified range on another sheet. In `sheet_edit`, `set_note` writes or clears notes and `add_dropdown` adds validation where none exists. Inline choices are limited to 255 characters including separators; use a source range for longer lists. Notes differ from threaded comments: read existing threads, then use `reply_thread` or `edit_thread`. Editing a comment containing mentions is refused.
- **Native charts:** `charts` during creation or `add_chart` in `sheet_edit` can plot a table or A1 range. Set the anchor cell and optionally name the category and value columns. A qualified source can read another sheet. The chart stays linked to cells in the workbook. `add_table` turns an existing rectangular range with literal headers into a native table for subsequent use.
- **Flat grids:** Use `format: "csv"` or `"tsv"` for one grid of top-level columns/rows. These preserve text, emit ISO dates as text and omit native formulas, styles, charts, notes and validation. Choose XLSX when the workbook behavior matters.

## Build slides with native objects and editable chart data

`deck_create` accepts ordered `slides` with title, subtitle, Markdown body, speaker notes and optional native layout. Use `pictures`, `tables` and `charts` arrays for several objects on a slide. Table input has `header` and `rows`. Pictures are shared local files and can use a picture placeholder or a box in points; give meaningful alt text. Select a content layout for tables and charts and preview object placement, especially on dense slides.

Charts can use explicit categories and series or a revision-bound workbook table source. For example, a chart entry in a slide's `charts` array can be:

```json
{
  "type": "bar",
  "title": "Pipeline by account",
  "source": {
    "file": "/Users/me/Shared/Outputs/Pipeline.xlsx",
    "expected_revision": "<saved workbook revision>",
    "table": "<exact table name from the workbook outline>",
    "category_column": "Account",
    "value_columns": ["Amount"]
  }
}
```

Use the workbook's actual returned path, even when collision handling gave it a suffix. The source is an **editable embedded snapshot**, not a live link to the external workbook. Use a supported [session dependency and explicit refresh](/docs/human-review-sessions/) when the user needs a tracked refresh workflow. The returned deck outline includes slide IDs, layouts and theme; use the new shape IDs in the change report for follow-up `deck_edit` calls.

## Choose the Word or template route

- `document_create` is the route for a formatted Word document from Markdown or structured blocks. It also supports PDF, HTML and Markdown output. For Word, use the returned heading and body block IDs and revision when continuing with `doc_edit`.
- `doc_create` creates a blank native DOCX or copies a DOCX/DOCM document as a template. `sheet_create` and `deck_create` also support blank files and exact native template copies. Template mode uses `from` and `expected_template_revision`; it preserves existing contents, including existing slides/sheets, and does not execute macros. Do not combine an initial grid or slide list with `from`. Copy first, then edit the copy using its revision and native addresses.

## Verify and hand off

Check the returned path, revision, outline, reported formula errors and any history warning. Use `sheet_read`, `doc_check`/`doc_render` or `deck_check`/`deck_render` as appropriate. Surface what the checks covered rather than treating a render as proof of Office parity. Attach the working file and any export to a [human review session](/docs/human-review-sessions/) so the user can inspect and continue editing.
