Professional DOCX/PPTX document editing with tracked changes, formatting preservation, highlights, strikethrough, and Git version control.
Scanned 9/7/2026
Install to Claude Code
npx -y skills add modbender/skill-library-mcp --skill office-document-editor --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Office Document Editor?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/modbender-office-document-editor)More formats (shields.io, HTML) on the badges page.
---
name: office-document-editor
description: Professional DOCX/PPTX document editing with tracked changes, formatting preservation, highlights, strikethrough, and Git version control.
license: MIT
metadata:
openclaw:
requires:
bins:
- uv
- curl
install:
- id: uv-env
kind: uv
path: .
bins: [docx_editor.py, pptx_editor.py, generate_diff.py]
---
# Universal Office Document Editor
Professional document editing for **any** DOCX/PPTX file from **any source**.
## Quick Reference
| Task | Approach |
|------|----------|
| Fetch file from upload | `bash scripts/fetch_file.sh upload` |
| Fetch file from URL | `bash scripts/fetch_file.sh https://example.com/file.docx` |
| Fetch file from SFTP | `bash scripts/fetch_file.sh sftp://user@host:/path/file.docx` |
| Edit DOCX | `uv run python scripts/docx_editor.py input.docx output.docx edits.json` |
| Edit PPTX | `uv run python scripts/pptx_editor.py input.pptx output.pptx edits.json` |
| Generate diff | `uv run python scripts/generate_diff.py old.docx new.docx diff.md` |
| Interactive mode | `bash scripts/interactive_edit.sh` |
---
## File Sources
### Uploaded Files (Chat Attachments)
```bash
# Get latest uploaded DOCX
bash scripts/fetch_file.sh upload output.docx
# Get latest uploaded PPTX
bash scripts/fetch_file.sh upload output.pptx
```
Location: `~/.openclaw/workspace/media/inbound/file_*.docx`
### Local Filesystem Paths
```bash
# Copy from local path
bash scripts/fetch_file.sh ~/Documents/report.docx output.docx
# Or direct path
bash scripts/fetch_file.sh /absolute/path/file.pptx output.pptx
```
### Public URLs
```bash
# Download from URL
bash scripts/fetch_file.sh https://example.com/document.docx output.docx
```
### SFTP/SSH Remote Files
```bash
# Fetch via SFTP
bash scripts/fetch_file.sh sftp://user@host:/path/file.docx output.docx
```
---
## Creating Edit Rules
Create `edits.json` with your editing instructions:
```json
{
"description": "Edit description",
"replacements": [
{
"search": "old text",
"replace": "new text",
"style": "highlight"
}
],
"additions": [
{
"after": "after this text",
"text": "add this text",
"style": "highlight"
}
],
"slides": [
{
"action": "rearrange",
"order": [0, 2, 1, 3]
}
]
}
```
### Supported Styles
- `replace` - Direct replacement
- `highlight` - Yellow highlight
- `delete` - Strikethrough
- `bold` - Bold text
- `underline` - Underline
### Slide Actions (PPTX only)
- `rearrange` - Change slide order
- `add` - Add new slide
- `remove` - Delete slide
---
## Editing Documents
### Edit DOCX
```bash
uv run python scripts/docx_editor.py input.docx output.docx edits.json
```
Features:
- Paragraph text editing
- Table cell editing
- Format preservation
- Multiple replacements
- Text additions
### Edit PPTX
```bash
uv run python scripts/pptx_editor.py input.pptx output.pptx edits.json
```
Features:
- Slide text replacement
- Slide rearrangement
- Add/remove slides
- Format preservation
### Generate Diff Report
```bash
uv run python scripts/generate_diff.py input.docx output.docx diff-report.md
```
Output: Standard Unified Diff format in Markdown.
---
## Complete Workflow
### Step 1: Fetch File
```bash
# From upload
bash scripts/fetch_file.sh upload input.docx
# From URL
bash scripts/fetch_file.sh https://example.com/file.docx input.docx
# From local path
bash scripts/fetch_file.sh ~/Documents/file.docx input.docx
```
### Step 2: Create Edit Rules
```json
{
"description": "IRB Review Response",
"replacements": [
{
"search": "2026 年 2 月 28 日",
"replace": "2026 年 8 月 31 日",
"style": "highlight"
}
]
}
```
### Step 3: Execute Edit
```bash
uv run python scripts/docx_editor.py input.docx output.docx edits.json
```
### Step 4: Generate Reports
```bash
# Unified Diff
uv run python scripts/generate_diff.py input.docx output.docx diff.md
# Convert to Markdown
uv run markitdown output.docx > output.md
```
### Step 5: Version Control
```bash
git add *.docx *.md diff.md
git commit -m "Edit: Description of changes"
```
---
## Interactive Mode
For guided editing:
```bash
bash scripts/interactive_edit.sh
```
This will prompt you through:
1. File source selection
2. Edit type selection
3. Details collection
4. Output location
---
## Examples
### Example 1: Text Replacement with Highlight
```json
{
"replacements": [
{
"search": "February 28, 2026",
"replace": "August 31, 2026",
"style": "highlight"
}
]
}
```
### Example 2: Add Text After Question
```json
{
"additions": [
{
"after": "What is the research topic?",
"text": "[ANSWER] Data Structures and Algorithms",
"style": "highlight"
}
]
}
```
### Example 3: Rearrange Slides
```json
{
"slides": [
{
"action": "rearrange",
"order": [0, 2, 1, 3, 4]
}
]
}
```
---
## Notes
### Format Preservation
- ✅ Text, paragraphs, tables: Fully preserved
- ✅ Highlights, strikethrough, bold: Supported
- ⚠️ Complex styles (custom themes): May be lost
- ❌ Images, charts: Manual handling required
### Table Text Replacement
python-docx requires **exact match** (including spaces, punctuation, newlines) for table text.
**Solutions:**
1. Use shorter search strings
2. Use `markitdown` to preview table content first
3. Use exact match in JSON
### Git Best Practices
- Use local Git repo (do not upload to GitHub)
- Add sensitive files to `.gitignore`
- Backup to secure location regularly
---
## Dependencies
- **uv**: Package management and virtual environment
- **python-docx**: DOCX editing
- **python-pptx**: PPTX editing
- **mammoth**: DOCX to Markdown conversion
- **markitdown**: Universal document conversion
- **curl**: URL downloads
- **sftp**: SFTP file transfers (optional)
### Installation
```bash
cd ~/.openclaw/workspace/skills/office-document-editor
uv sync
```
---
## Troubleshooting
### "No replacements made"
**Cause:** Text doesn't match exactly
**Solution:**
```bash
# Preview content
uv run markitdown input.docx
# Use exact text from preview
```
### "Virtual environment not found"
**Solution:**
```bash
cd ~/.openclaw/workspace/skills/office-document-editor
uv sync
```
### "File not found"
**Solutions:**
- Check file path is correct
- Try uploading the file again
- Verify URL is accessible
- Check SFTP credentials
---
## Scripts Reference
### fetch_file.sh
Universal file fetcher for all source types.
```bash
bash scripts/fetch_file.sh <source> [output_filename]
```
Sources:
- `upload` - Latest uploaded file
- `/path/to/file` - Local path
- `https://...` - Public URL
- `sftp://...` - SFTP remote
### docx_editor.py
Edit Word documents with formatting.
```bash
uv run python scripts/docx_editor.py input.docx output.docx edits.json
```
### pptx_editor.py
Edit PowerPoint presentations.
```bash
uv run python scripts/pptx_editor.py input.pptx output.pptx edits.json
```
### generate_diff.py
Generate Unified Diff reports.
```bash
uv run python scripts/generate_diff.py old.docx new.docx diff.md
```
### interactive_edit.sh
Interactive guided editing.
```bash
bash scripts/interactive_edit.sh
```
### workflow_complete.sh
Complete automated workflow.
```bash
bash scripts/workflow_complete.sh input.docx edits.json
```
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!