# DOCX

> Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation.

- Skill: `carlheath/docx` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add carlheath/docx`
- Raw SKILL.md: https://api.skillmd.com/api/skills/carlheath/docx/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- License: Proprietary. LICENSE.txt has complete terms
- Author: carlheath (https://skillmd.com/u/carlheath)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/carlheath/docx

---


# DOCX creation, editing, and analysis

## Overview

A .docx file is a ZIP archive containing XML files.

## Quick Reference

| Task | Approach |
|------|----------|
| Read/analyze content | `pandoc` or unpack for raw XML |
| Create new document | Use `docx-js` — see [references/creating.md](references/creating.md) |
| Edit existing document | Unpack → edit XML → repack — see [references/editing.md](references/editing.md) |
| Raw XML (tracked changes, comments, images) | See [references/xml.md](references/xml.md) |

### Converting .doc to .docx

Legacy `.doc` files must be converted before editing:

```bash
python scripts/office/soffice.py --headless --convert-to docx document.doc
```

### Reading Content

```bash
# Text extraction with tracked changes
pandoc --track-changes=all document.docx -o output.md

# Raw XML access
python scripts/office/unpack.py document.docx unpacked/
```

### Converting to Images

```bash
python scripts/office/soffice.py --headless --convert-to pdf document.docx
pdftoppm -jpeg -r 150 document.pdf page
```

### Accepting Tracked Changes

To produce a clean document with all tracked changes accepted (requires LibreOffice):

```bash
python scripts/accept_changes.py input.docx output.docx
```

---

## Detailed references

Implementation details live in `references/` (one level deep, loaded only when relevant):

- **[references/creating.md](references/creating.md)** (~340 lines) — Creating new .docx files with docx-js: setup, validation, page size, styles, lists, tables, images, page breaks, hyperlinks, footnotes, tab stops, multi-column layouts, table of contents, headers/footers, critical rules for docx-js.
- **[references/editing.md](references/editing.md)** (~60 lines) — Editing existing documents: the unpack → edit XML → repack workflow, common pitfalls.
- **[references/xml.md](references/xml.md)** (~130 lines) — Raw XML reference: schema compliance, tracked changes, comments, images.

When working on a creating or editing task, read the relevant reference file before generating code.

---

## Dependencies

- **pandoc**: Text extraction
- **docx**: `npm install -g docx` (new documents)
- **LibreOffice**: PDF conversion (auto-configured for sandboxed environments via `scripts/office/soffice.py`)
- **Poppler**: `pdftoppm` for images

