🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Office Document Editor

by @tsukisama9292

Professional DOCX/PPTX document editing with tracked changes, formatting preservation, highlights, strikethrough, and Git version control.

Versionv1.0.0
Downloads2,135
Installs8
Stars⭐ 1
TERMINAL
clawhub install office-document-editor

πŸ“– About This Skill


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)

# 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

# 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

# Download from URL
bash scripts/fetch_file.sh https://example.com/document.docx output.docx

SFTP/SSH Remote Files

# 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:

{
  "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

    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

    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

    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

    # 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

    {
      "description": "IRB Review Response",
      "replacements": [
        {
          "search": "2026 εΉ΄ 2 月 28 ζ—₯",
          "replace": "2026 εΉ΄ 8 月 31 ζ—₯",
          "style": "highlight"
        }
      ]
    }
    

    Step 3: Execute Edit

    uv run python scripts/docx_editor.py input.docx output.docx edits.json
    

    Step 4: Generate Reports

    # 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

    git add *.docx *.md diff.md
    git commit -m "Edit: Description of changes"
    


    Interactive Mode

    For guided editing:

    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

    {
      "replacements": [
        {
          "search": "February 28, 2026",
          "replace": "August 31, 2026",
          "style": "highlight"
        }
      ]
    }
    

    Example 2: Add Text After Question

    {
      "additions": [
        {
          "after": "What is the research topic?",
          "text": "[ANSWER] Data Structures and Algorithms",
          "style": "highlight"
        }
      ]
    }
    

    Example 3: Rearrange Slides

    {
      "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

    cd ~/.openclaw/workspace/skills/office-document-editor
    uv sync
    


    Troubleshooting

    "No replacements made"

    Cause: Text doesn't match exactly

    Solution:

    # Preview content
    uv run markitdown input.docx

    Use exact text from preview

    "Virtual environment not found"

    Solution:

    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 scripts/fetch_file.sh  [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.

    uv run python scripts/docx_editor.py input.docx output.docx edits.json
    

    pptx_editor.py

    Edit PowerPoint presentations.

    uv run python scripts/pptx_editor.py input.pptx output.pptx edits.json
    

    generate_diff.py

    Generate Unified Diff reports.

    uv run python scripts/generate_diff.py old.docx new.docx diff.md
    

    interactive_edit.sh

    Interactive guided editing.

    bash scripts/interactive_edit.sh
    

    workflow_complete.sh

    Complete automated workflow.

    bash scripts/workflow_complete.sh input.docx edits.json
    

    πŸ’‘ Examples

    Example 1: Text Replacement with Highlight

    {
      "replacements": [
        {
          "search": "February 28, 2026",
          "replace": "August 31, 2026",
          "style": "highlight"
        }
      ]
    }
    

    Example 2: Add Text After Question

    {
      "additions": [
        {
          "after": "What is the research topic?",
          "text": "[ANSWER] Data Structures and Algorithms",
          "style": "highlight"
        }
      ]
    }
    

    Example 3: Rearrange Slides

    {
      "slides": [
        {
          "action": "rearrange",
          "order": [0, 2, 1, 3, 4]
        }
      ]
    }
    


    πŸ“‹ Tips & Best Practices

    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