darellchua2

ooxml-editing-skill

Surgical OOXML edits — unpack DOCX/PPTX/XLSX to XML, edit elements, validate, repack ('fix typo on slide 4'); houses the html2pptx escape hatch. Not template slide generation.

darellchua2 7 5 Updated 1mo ago

Resources

1
GitHub

Install

npx skillscat add darellchua2/civiltekk-skills/ooxml-editing-skill

Install via the SkillsCat registry.

SKILL.md

What I do

I provide surgical OOXML editing for any Office file (.docx, .pptx, .xlsx). Rather than regenerating an entire document, I unpack the zip, edit specific XML elements, validate the structure, and repack — preserving everything else exactly.

  • Unpack any Office file to its XML parts (unpack.py)
  • Edit individual XML elements (slide XML, document XML, workbook XML)
  • Validate structural integrity before repacking (validate.py + validators/)
  • Clean unreferenced files from unpacked dirs (clean.py)
  • Pack the edited XML back into a valid Office file (pack.py)

I also house the html2pptx escape hatch — explicit "convert HTML to PPTX" requests only. This path is undocumented in the orchestrator's default routing and is surfaced only when the user explicitly says "convert HTML to PowerPoint".

When to use me

Use this skill when the user wants:

  • "Fix typo on slide 4" / "change this specific text" — surgical edits
  • "Update this chart's data" — targeted XML modification
  • "Remove slide 3" — structural edit
  • "Change this shape's fill color" — property edit
  • "Convert HTML to PPTX" (explicit escape hatch — follows the hidden-JSON approach: html2pptx → generate-template → generate-slide)

Do NOT use me for:

  • Template-based slide generation → pptx-generate-slide-skill
  • Template extraction/embedding → pptx-generate-template-skill
  • Template extension (cloning layouts) → pptx-template-modifier-skill
  • Visual analysis / thumbnails → office-thumbnail-skill

Prerequisites

  • Python 3.9+ with defusedxml for secure XML parsing
  • LibreOffice (soffice) — only needed by some validators for render-checking; not required for basic unpack/pack
  • For the html2pptx escape hatch only: Node.js + pptxgenjs + playwright + sharp (not needed for pure OOXML editing)

Workflow

  1. Unpack the Office file to a working directory:

    python scripts/unpack.py presentation.pptx unpacked/
  2. Edit the XML files in unpacked/ (primarily ppt/slides/slide{N}.xml, word/document.xml, or xl/worksheets/sheet{N}.xml)

  3. Validate after each edit:

    python scripts/validate.py unpacked/ --original presentation.pptx
  4. Clean unreferenced files (optional):

    python scripts/clean.py unpacked/
  5. Pack back to an Office file:

    python scripts/pack.py unpacked/ new_presentation.pptx

Scripts

Script Purpose
unpack.py Extract Office zip → pretty-printed XML files
pack.py Validate + condense XML → create Office zip
validate.py Validate XML structure against OOXML rules
clean.py Remove unreferenced files from unpacked dir
validators/base.py Shared validation logic
validators/pptx.py PPTX-specific OOXML rules

html2pptx Escape Hatch

For explicit "convert HTML to PPTX" requests only. The Node-based html2pptx toolchain (pptxgenjs + playwright) produces a basic PPTX from HTML slides. Per BT-142, this output then flows through pptx-generate-template-skill (extract + embed hidden JSON) → pptx-generate-slide-skill (final render against Slide Master) to ensure the hidden-JSON-template approach is followed.

This path is intentionally undocumented in the orchestrator's default routing — it's surfaced only when the user explicitly says "convert HTML to PowerPoint" or similar.