{"id":"0a987b62-124e-4af4-a292-8942e73e537e","shortId":"PfJ3PW","kind":"skill","title":"Docx","tagline":"Skills skill by Anthropics","description":"# DOCX creation, editing, and analysis\n\n## Overview\n\nA .docx file is a ZIP archive containing XML files.\n\n## Quick Reference\n\n| Task | Approach |\n|------|----------|\n| Read/analyze content | `pandoc` or unpack for raw XML |\n| Create new document | Use `docx-js` - see Creating New Documents below |\n| Edit existing document | Unpack → edit XML → repack - see Editing Existing Documents below |\n\n### Converting .doc to .docx\n\nLegacy `.doc` files must be converted before editing:\n\n```bash\npython scripts/office/soffice.py --headless --convert-to docx document.doc\n```\n\n### Reading Content\n\n```bash\n# Text extraction with tracked changes\npandoc --track-changes=all document.docx -o output.md\n\n# Raw XML access\npython scripts/office/unpack.py document.docx unpacked/\n```\n\n### Converting to Images\n\n```bash\npython scripts/office/soffice.py --headless --convert-to pdf document.docx\npdftoppm -jpeg -r 150 document.pdf page\n```\n\n### Accepting Tracked Changes\n\nTo produce a clean document with all tracked changes accepted (requires LibreOffice):\n\n```bash\npython scripts/accept_changes.py input.docx output.docx\n```\n\n---\n\n## Creating New Documents\n\nGenerate .docx files with JavaScript, then validate. Install: `npm install -g docx`\n\n### Setup\n```javascript\nconst { Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell, ImageRun,\n        Header, Footer, AlignmentType, PageOrientation, LevelFormat, ExternalHyperlink,\n        InternalHyperlink, Bookmark, FootnoteReferenceRun, PositionalTab,\n        PositionalTabAlignment, PositionalTabRelativeTo, PositionalTabLeader,\n        TabStopType, TabStopPosition, Column, SectionType,\n        TableOfContents, HeadingLevel, BorderStyle, WidthType, ShadingType,\n        VerticalAlign, PageNumber, PageBreak } = require('docx');\n\nconst doc = new Document({ sections: [{ children: [/* content */] }] });\nPacker.toBuffer(doc).then(buffer => fs.writeFileSync(\"doc.docx\", buffer));\n```\n\n### Validation\nAfter creating the file, validate it. If validation fails, unpack, fix the XML, and repack.\n```bash\npython scripts/office/validate.py doc.docx\n```\n\n### Page Size\n\n```javascript\n// CRITICAL: docx-js defaults to A4, not US Letter\n// Always set page size explicitly for consistent results\nsections: [{\n  properties: {\n    page: {\n      size: {\n        width: 12240,   // 8.5 inches in DXA\n        height: 15840   // 11 inches in DXA\n      },\n      margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 } // 1 inch margins\n    }\n  },\n  children: [/* content */]\n}]\n```\n\n**Common page sizes (DXA units, 1440 DXA = 1 inch):**\n\n| Paper | Width | Height | Content Width (1\" margins) |\n|-------|-------|--------|---------------------------|\n| US Letter | 12,240 | 15,840 | 9,360 |\n| A4 (default) | 11,906 | 16,838 | 9,026 |\n\n**Landscape orientation:** docx-js swaps width/height internally, so pass portrait dimensions and let it handle the swap:\n```javascript\nsize: {\n  width: 12240,   // Pass SHORT edge as width\n  height: 15840,  // Pass LONG edge as height\n  orientation: PageOrientation.LANDSCAPE  // docx-js swaps them in the XML\n},\n// Content width = 15840 - left margin - right margin (uses the long edge)\n```\n\n### Styles (Override Built-in Headings)\n\nUse Arial as the default font (universally supported). Keep titles black for readability.\n\n```javascript\nconst doc = new Document({\n  styles: {\n    default: { document: { run: { font: \"Arial\", size: 24 } } }, // 12pt default\n    paragraphStyles: [\n      // IMPORTANT: Use exact IDs to override built-in styles\n      { id: \"Heading1\", name: \"Heading 1\", basedOn: \"Normal\", next: \"Normal\", quickFormat: true,\n        run: { size: 32, bold: true, font: \"Arial\" },\n        paragraph: { spacing: { before: 240, after: 240 }, outlineLevel: 0 } }, // outlineLevel required for TOC\n      { id: \"Heading2\", name: \"Heading 2\", basedOn: \"Normal\", next: \"Normal\", quickFormat: true,\n        run: { size: 28, bold: true, font: \"Arial\" },\n        paragraph: { spacing: { before: 180, after: 180 }, outlineLevel: 1 } },\n    ]\n  },\n  sections: [{\n    children: [\n      new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun(\"Title\")] }),\n    ]\n  }]\n});\n```\n\n### Lists (NEVER use unicode bullets)\n\n```javascript\n// ❌ WRONG - never manually insert bullet characters\nnew Paragraph({ children: [new TextRun(\"• Item\")] })  // BAD\nnew Paragraph({ children: [new TextRun(\"\\u2022 Item\")] })  // BAD\n\n// ✅ CORRECT - use numbering config with LevelFormat.BULLET\nconst doc = new Document({\n  numbering: {\n    config: [\n      { reference: \"bullets\",\n        levels: [{ level: 0, format: LevelFormat.BULLET, text: \"•\", alignment: AlignmentType.LEFT,\n          style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },\n      { reference: \"numbers\",\n        levels: [{ level: 0, format: LevelFormat.DECIMAL, text: \"%1.\", alignment: AlignmentType.LEFT,\n          style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },\n    ]\n  },\n  sections: [{\n    children: [\n      new Paragraph({ numbering: { reference: \"bullets\", level: 0 },\n        children: [new TextRun(\"Bullet item\")] }),\n      new Paragraph({ numbering: { reference: \"numbers\", level: 0 },\n        children: [new TextRun(\"Numbered item\")] }),\n    ]\n  }]\n});\n\n// ⚠️ Each reference creates INDEPENDENT numbering\n// Same reference = continues (1,2,3 then 4,5,6)\n// Different reference = restarts (1,2,3 then 1,2,3)\n```\n\n### Tables\n\n**CRITICAL: Tables need dual widths** - set both `columnWidths` on the table AND `width` on each cell. Without both, tables render incorrectly on some platforms.\n\n```javascript\n// CRITICAL: Always set table width for consistent rendering\n// CRITICAL: Use ShadingType.CLEAR (not SOLID) to prevent black backgrounds\nconst border = { style: BorderStyle.SINGLE, size: 1, color: \"CCCCCC\" };\nconst borders = { top: border, bottom: border, left: border, right: border };\n\nnew Table({\n  width: { size: 9360, type: WidthType.DXA }, // Always use DXA (percentages break in Google Docs)\n  columnWidths: [4680, 4680], // Must sum to table width (DXA: 1440 = 1 inch)\n  rows: [\n    new TableRow({\n      children: [\n        new TableCell({\n          borders,\n          width: { size: 4680, type: WidthType.DXA }, // Also set on each cell\n          shading: { fill: \"D5E8F0\", type: ShadingType.CLEAR }, // CLEAR not SOLID\n          margins: { top: 80, bottom: 80, left: 120, right: 120 }, // Cell padding (internal, not added to width)\n          children: [new Paragraph({ children: [new TextRun(\"Cell\")] })]\n        })\n      ]\n    })\n  ]\n})\n```\n\n**Table width calculation:**\n\nAlways use `WidthType.DXA` — `WidthType.PERCENTAGE` breaks in Google Docs.\n\n```javascript\n// Table width = sum of columnWidths = content width\n// US Letter with 1\" margins: 12240 - 2880 = 9360 DXA\nwidth: { size: 9360, type: WidthType.DXA },\ncolumnWidths: [7000, 2360]  // Must sum to table width\n```\n\n**Width rules:**\n- **Always use `WidthType.DXA`** — never `WidthType.PERCENTAGE` (incompatible with Google Docs)\n- Table width must equal the sum of `columnWidths`\n- Cell `width` must match corresponding `columnWidth`\n- Cell `margins` are internal padding - they reduce content area, not add to cell width\n- For full-width tables: use content width (page width minus left and right margins)\n\n### Images\n\n```javascript\n// CRITICAL: type parameter is REQUIRED\nnew Paragraph({\n  children: [new ImageRun({\n    type: \"png\", // Required: png, jpg, jpeg, gif, bmp, svg\n    data: fs.readFileSync(\"image.png\"),\n    transformation: { width: 200, height: 150 },\n    altText: { title: \"Title\", description: \"Desc\", name: \"Name\" } // All three required\n  })]\n})\n```\n\n### Page Breaks\n\n```javascript\n// CRITICAL: PageBreak must be inside a Paragraph\nnew Paragraph({ children: [new PageBreak()] })\n\n// Or use pageBreakBefore\nnew Paragraph({ pageBreakBefore: true, children: [new TextRun(\"New page\")] })\n```\n\n### Hyperlinks\n\n```javascript\n// External link\nnew Paragraph({\n  children: [new ExternalHyperlink({\n    children: [new TextRun({ text: \"Click here\", style: \"Hyperlink\" })],\n    link: \"https://example.com\",\n  })]\n})\n\n// Internal link (bookmark + reference)\n// 1. Create bookmark at destination\nnew Paragraph({ heading: HeadingLevel.HEADING_1, children: [\n  new Bookmark({ id: \"chapter1\", children: [new TextRun(\"Chapter 1\")] }),\n]})\n// 2. Link to it\nnew Paragraph({ children: [new InternalHyperlink({\n  children: [new TextRun({ text: \"See Chapter 1\", style: \"Hyperlink\" })],\n  anchor: \"chapter1\",\n})]})\n```\n\n### Footnotes\n\n```javascript\nconst doc = new Document({\n  footnotes: {\n    1: { children: [new Paragraph(\"Source: Annual Report 2024\")] },\n    2: { children: [new Paragraph(\"See appendix for methodology\")] },\n  },\n  sections: [{\n    children: [new Paragraph({\n      children: [\n        new TextRun(\"Revenue grew 15%\"),\n        new FootnoteReferenceRun(1),\n        new TextRun(\" using adjusted metrics\"),\n        new FootnoteReferenceRun(2),\n      ],\n    })]\n  }]\n});\n```\n\n### Tab Stops\n\n```javascript\n// Right-align text on same line (e.g., date opposite a title)\nnew Paragraph({\n  children: [\n    new TextRun(\"Company Name\"),\n    new TextRun(\"\\tJanuary 2025\"),\n  ],\n  tabStops: [{ type: TabStopType.RIGHT, position: TabStopPosition.MAX }],\n})\n\n// Dot leader (e.g., TOC-style)\nnew Paragraph({\n  children: [\n    new TextRun(\"Introduction\"),\n    new TextRun({ children: [\n      new PositionalTab({\n        alignment: PositionalTabAlignment.RIGHT,\n        relativeTo: PositionalTabRelativeTo.MARGIN,\n        leader: PositionalTabLeader.DOT,\n      }),\n      \"3\",\n    ]}),\n  ],\n})\n```\n\n### Multi-Column Layouts\n\n```javascript\n// Equal-width columns\nsections: [{\n  properties: {\n    column: {\n      count: 2,          // number of columns\n      space: 720,        // gap between columns in DXA (720 = 0.5 inch)\n      equalWidth: true,\n      separate: true,    // vertical line between columns\n    },\n  },\n  children: [/* content flows naturally across columns */]\n}]\n\n// Custom-width columns (equalWidth must be false)\nsections: [{\n  properties: {\n    column: {\n      equalWidth: false,\n      children: [\n        new Column({ width: 5400, space: 720 }),\n        new Column({ width: 3240 }),\n      ],\n    },\n  },\n  children: [/* content */]\n}]\n```\n\nForce a column break with a new section using `type: SectionType.NEXT_COLUMN`.\n\n### Table of Contents\n\n```javascript\n// CRITICAL: Headings must use HeadingLevel ONLY - no custom styles\nnew TableOfContents(\"Table of Contents\", { hyperlink: true, headingStyleRange: \"1-3\" })\n```\n\n### Headers/Footers\n\n```javascript\nsections: [{\n  properties: {\n    page: { margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 } } // 1440 = 1 inch\n  },\n  headers: {\n    default: new Header({ children: [new Paragraph({ children: [new TextRun(\"Header\")] })] })\n  },\n  footers: {\n    default: new Footer({ children: [new Paragraph({\n      children: [new TextRun(\"Page \"), new TextRun({ children: [PageNumber.CURRENT] })]\n    })] })\n  },\n  children: [/* content */]\n}]\n```\n\n### Critical Rules for docx-js\n\n- **Set page size explicitly** - docx-js defaults to A4; use US Letter (12240 x 15840 DXA) for US documents\n- **Landscape: pass portrait dimensions** - docx-js swaps width/height internally; pass short edge as `width`, long edge as `height`, and set `orientation: PageOrientation.LANDSCAPE`\n- **Never use `\\n`** - use separate Paragraph elements\n- **Never use unicode bullets** - use `LevelFormat.BULLET` with numbering config\n- **PageBreak must be in Paragraph** - standalone creates invalid XML\n- **ImageRun requires `type`** - always specify png/jpg/etc\n- **Always set table `width` with DXA** - never use `WidthType.PERCENTAGE` (breaks in Google Docs)\n- **Tables need dual widths** - `columnWidths` array AND cell `width`, both must match\n- **Table width = sum of columnWidths** - for DXA, ensure they add up exactly\n- **Always add cell margins** - use `margins: { top: 80, bottom: 80, left: 120, right: 120 }` for readable padding\n- **Use `ShadingType.CLEAR`** - never SOLID for table shading\n- **Never use tables as dividers/rules** - cells have minimum height and render as empty boxes (including in headers/footers); use `border: { bottom: { style: BorderStyle.SINGLE, size: 6, color: \"2E75B6\", space: 1 } }` on a Paragraph instead. For two-column footers, use tab stops (see Tab Stops section), not tables\n- **TOC requires HeadingLevel only** - no custom styles on heading paragraphs\n- **Override built-in styles** - use exact IDs: \"Heading1\", \"Heading2\", etc.\n- **Include `outlineLevel`** - required for TOC (0 for H1, 1 for H2, etc.)\n\n---\n\n## Editing Existing Documents\n\n**Follow all 3 steps in order.**\n\n### Step 1: Unpack\n```bash\npython scripts/office/unpack.py document.docx unpacked/\n```\nExtracts XML, pretty-prints, merges adjacent runs, and converts smart quotes to XML entities (`&#x201C;` etc.) so they survive editing. Use `--merge-runs false` to skip run merging.\n\n### Step 2: Edit XML\n\nEdit files in `unpacked/word/`. See XML Reference below for patterns.\n\n**Use \"Claude\" as the author** for tracked changes and comments, unless the user explicitly requests use of a different name.\n\n**Use the Edit tool directly for string replacement. Do not write Python scripts.** Scripts introduce unnecessary complexity. The Edit tool shows exactly what is being replaced.\n\n**CRITICAL: Use smart quotes for new content.** When adding text with apostrophes or quotes, use XML entities to produce smart quotes:\n```xml\n<!-- Use these entities for professional typography -->\n<w:t>Here&#x2019;s a quote: &#x201C;Hello&#x201D;</w:t>\n```\n| Entity | Character |\n|--------|-----------|\n| `&#x2018;` | ‘ (left single) |\n| `&#x2019;` | ’ (right single / apostrophe) |\n| `&#x201C;` | “ (left double) |\n| `&#x201D;` | ” (right double) |\n\n**Adding comments:** Use `comment.py` to handle boilerplate across multiple XML files (text must be pre-escaped XML):\n```bash\npython scripts/comment.py unpacked/ 0 \"Comment text with &amp; and &#x2019;\"\npython scripts/comment.py unpacked/ 1 \"Reply text\" --parent 0  # reply to comment 0\npython scripts/comment.py unpacked/ 0 \"Text\" --author \"Custom Author\"  # custom author name\n```\nThen add markers to document.xml (see Comments in XML Reference).\n\n### Step 3: Pack\n```bash\npython scripts/office/pack.py unpacked/ output.docx --original document.docx\n```\nValidates with auto-repair, condenses XML, and creates DOCX. Use `--validate false` to skip.\n\n**Auto-repair will fix:**\n- `durableId` >= 0x7FFFFFFF (regenerates valid ID)\n- Missing `xml:space=\"preserve\"` on `<w:t>` with whitespace\n\n**Auto-repair won't fix:**\n- Malformed XML, invalid element nesting, missing relationships, schema violations\n\n### Common Pitfalls\n\n- **Replace entire `<w:r>` elements**: When adding tracked changes, replace the whole `<w:r>...</w:r>` block with `<w:del>...<w:ins>...` as siblings. Don't inject tracked change tags inside a run.\n- **Preserve `<w:rPr>` formatting**: Copy the original run's `<w:rPr>` block into your tracked change runs to maintain bold, font size, etc.\n\n---\n\n## XML Reference\n\n### Schema Compliance\n\n- **Element order in `<w:pPr>`**: `<w:pStyle>`, `<w:numPr>`, `<w:spacing>`, `<w:ind>`, `<w:jc>`, `<w:rPr>` last\n- **Whitespace**: Add `xml:space=\"preserve\"` to `<w:t>` with leading/trailing spaces\n- **RSIDs**: Must be 8-digit hex (e.g., `00AB1234`)\n\n### Tracked Changes\n\n**Insertion:**\n```xml\n<w:ins w:id=\"1\" w:author=\"Claude\" w:date=\"2025-01-01T00:00:00Z\">\n  <w:r><w:t>inserted text</w:t></w:r>\n</w:ins>\n```\n\n**Deletion:**\n```xml\n<w:del w:id=\"2\" w:author=\"Claude\" w:date=\"2025-01-01T00:00:00Z\">\n  <w:r><w:delText>deleted text</w:delText></w:r>\n</w:del>\n```\n\n**Inside `<w:del>`**: Use `<w:delText>` instead of `<w:t>`, and `<w:delInstrText>` instead of `<w:instrText>`.\n\n**Minimal edits** - only mark what changes:\n```xml\n<!-- Change \"30 days\" to \"60 days\" -->\n<w:r><w:t>The term is </w:t></w:r>\n<w:del w:id=\"1\" w:author=\"Claude\" w:date=\"...\">\n  <w:r><w:delText>30</w:delText></w:r>\n</w:del>\n<w:ins w:id=\"2\" w:author=\"Claude\" w:date=\"...\">\n  <w:r><w:t>60</w:t></w:r>\n</w:ins>\n<w:r><w:t> days.</w:t></w:r>\n```\n\n**Deleting entire paragraphs/list items** - when removing ALL content from a paragraph, also mark the paragraph mark as deleted so it merges with the next paragraph. Add `<w:del/>` inside `<w:pPr><w:rPr>`:\n```xml\n<w:p>\n  <w:pPr>\n    <w:numPr>...</w:numPr>  <!-- list numbering if present -->\n    <w:rPr>\n      <w:del w:id=\"1\" w:author=\"Claude\" w:date=\"2025-01-01T00:00:00Z\"/>\n    </w:rPr>\n  </w:pPr>\n  <w:del w:id=\"2\" w:author=\"Claude\" w:date=\"2025-01-01T00:00:00Z\">\n    <w:r><w:delText>Entire paragraph content being deleted...</w:delText></w:r>\n  </w:del>\n</w:p>\n```\nWithout the `<w:del/>` in `<w:pPr><w:rPr>`, accepting changes leaves an empty paragraph/list item.\n\n**Rejecting another author's insertion** - nest deletion inside their insertion:\n```xml\n<w:ins w:author=\"Jane\" w:id=\"5\">\n  <w:del w:author=\"Claude\" w:id=\"10\">\n    <w:r><w:delText>their inserted text</w:delText></w:r>\n  </w:del>\n</w:ins>\n```\n\n**Restoring another author's deletion** - add insertion after (don't modify their deletion):\n```xml\n<w:del w:author=\"Jane\" w:id=\"5\">\n  <w:r><w:delText>deleted text</w:delText></w:r>\n</w:del>\n<w:ins w:author=\"Claude\" w:id=\"10\">\n  <w:r><w:t>deleted text</w:t></w:r>\n</w:ins>\n```\n\n### Comments\n\nAfter running `comment.py` (see Step 2), add markers to document.xml. For replies, use `--parent` flag and nest markers inside the parent's.\n\n**CRITICAL: `<w:commentRangeStart>` and `<w:commentRangeEnd>` are siblings of `<w:r>`, never inside `<w:r>`.**\n\n```xml\n<!-- Comment markers are direct children of w:p, never inside w:r -->\n<w:commentRangeStart w:id=\"0\"/>\n<w:del w:id=\"1\" w:author=\"Claude\" w:date=\"2025-01-01T00:00:00Z\">\n  <w:r><w:delText>deleted</w:delText></w:r>\n</w:del>\n<w:r><w:t> more text</w:t></w:r>\n<w:commentRangeEnd w:id=\"0\"/>\n<w:r><w:rPr><w:rStyle w:val=\"CommentReference\"/></w:rPr><w:commentReference w:id=\"0\"/></w:r>\n\n<!-- Comment 0 with reply 1 nested inside -->\n<w:commentRangeStart w:id=\"0\"/>\n  <w:commentRangeStart w:id=\"1\"/>\n  <w:r><w:t>text</w:t></w:r>\n  <w:commentRangeEnd w:id=\"1\"/>\n<w:commentRangeEnd w:id=\"0\"/>\n<w:r><w:rPr><w:rStyle w:val=\"CommentReference\"/></w:rPr><w:commentReference w:id=\"0\"/></w:r>\n<w:r><w:rPr><w:rStyle w:val=\"CommentReference\"/></w:rPr><w:commentReference w:id=\"1\"/></w:r>\n```\n\n### Images\n\n1. Add image file to `word/media/`\n2. Add relationship to `word/_rels/document.xml.rels`:\n```xml\n<Relationship Id=\"rId5\" Type=\".../image\" Target=\"media/image1.png\"/>\n```\n3. Add content type to `[Content_Types].xml`:\n```xml\n<Default Extension=\"png\" ContentType=\"image/png\"/>\n```\n4. Reference in document.xml:\n```xml\n<w:drawing>\n  <wp:inline>\n    <wp:extent cx=\"914400\" cy=\"914400\"/>  <!-- EMUs: 914400 = 1 inch -->\n    <a:graphic>\n      <a:graphicData uri=\".../picture\">\n        <pic:pic>\n          <pic:blipFill><a:blip r:embed=\"rId5\"/></pic:blipFill>\n        </pic:pic>\n      </a:graphicData>\n    </a:graphic>\n  </wp:inline>\n</w:drawing>\n```\n\n---\n\n## Dependencies\n\n- **pandoc**: Text extraction\n- **docx**: `npm install -g docx` (new documents)\n- **LibreOffice**: PDF conversion (auto-configured for sandboxed environments via `scripts/office/soffice.py`)\n- **Poppler**: `pdftoppm` for images","tags":["docx","skills","anthropics"],"capabilities":["skill","source-anthropics","category-skills"],"categories":["skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/anthropics/skills/docx","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"install_from":"skills.sh"}},"qualityScore":"0.500","qualityRationale":"deterministic score 0.50 from registry signals: · indexed on skills.sh · published under anthropics/skills","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T02:40:12.317Z","embedding":null,"createdAt":"2026-04-18T20:23:41.337Z","updatedAt":"2026-04-24T02:40:12.317Z","lastSeenAt":"2026-04-24T02:40:12.317Z","tsv":"'-3':1162 '0':435,520,537,559,571,1422,1595,1607,1611,1615 '0.5':1086 '00ab1234':1758 '026':309 '0x7fffffff':1664 '1':273,285,292,414,465,472,541,585,595,599,650,688,760,922,931,941,957,969,997,1161,1178,1377,1425,1439,1603,1900 '11':260,304 '12':296 '120':721,723,1336,1338 '12240':253,331,762,1227 '12pt':397 '1440':266,268,270,272,283,687,1170,1172,1174,1176,1177 '15':298,994 '150':117,861 '15840':259,338,356,1229 '16':306 '180':461,463 '2':444,586,596,600,942,977,1005,1074,1476,1870,1906 '200':859 '2024':976 '2025':1031 '2360':773 '24':396 '240':297,431,433 '28':453 '2880':763 '2e75':1374 '3':587,597,601,1060,1434,1634,1912 '30':1786 '32':423 '3240':1125 '360':301,532,550 '4':589,1921 '4680':679,680,699 '5':590 '5400':1119 '6':591,1372 '60':1787 '7000':772 '720':530,548,1079,1085,1121 '8':1754 '8.5':254 '80':717,719,1332,1334 '838':307 '840':299 '9':300,308 '906':305 '9360':667,764,768 'a4':236,302,1223 'accept':120,132,1825 'access':97 'across':1100,1580 'ad':728,1543,1573,1696 'add':814,1322,1326,1624,1743,1814,1851,1871,1901,1907,1913 'adjac':1452 'adjust':1001 'align':524,542,1011,1054 'alignmenttyp':168 'alignmenttype.left':525,543 'also':702,1800 'alttext':862 'alway':240,629,670,741,781,1285,1288,1325 'analysi':10 'anchor':960 'annual':974 'anoth':1833,1847 'anthrop':5 'apostroph':1546,1568 'appendix':982 'approach':25 'archiv':18 'area':812 'arial':372,394,427,457 'array':1306 'author':1493,1617,1619,1621,1834,1848 'auto':1646,1659,1676,1941 'auto-configur':1940 'auto-repair':1645,1658,1675 'b6':1375 'background':644 'bad':495,503 'basedon':415,445 'bash':70,81,105,135,223,1441,1591,1636 'black':381,643 'block':1702,1722 'bmp':852 'boilerpl':1579 'bold':424,454,1730 'bookmark':173,920,924,934 'border':646,654,656,658,660,662,696,1367 'borderstyl':185 'borderstyle.single':648,1370 'bottom':269,657,718,1173,1333,1368 'box':1362 'break':674,745,873,1131,1297 'buffer':203,206 'built':368,407,1408 'built-in':367,406,1407 'bullet':481,487,517,557,563,1267 'calcul':740 'category-skills' 'cccccc':652 'cell':618,706,724,737,798,804,816,1308,1327,1354 'chang':86,90,122,131,1496,1698,1710,1726,1760,1781,1826 'chapter':940,956 'chapter1':936,961 'charact':488,1563 'children':198,276,467,473,491,498,552,560,572,693,731,734,842,884,894,905,908,932,937,948,951,970,978,986,989,1023,1045,1051,1096,1115,1126,1184,1187,1195,1198,1204,1206 'claud':1490 'clean':126 'clear':712 'click':912 'color':651,1373 'column':181,1063,1069,1072,1077,1082,1095,1101,1105,1112,1117,1123,1130,1139,1385 'columnwidth':610,678,754,771,797,803,1305,1317 'comment':1498,1574,1596,1610,1629,1864 'comment.py':1576,1867 'common':278,1690 'compani':1026 'complex':1525 'complianc':1737 'condens':1648 'config':507,515,1272 'configur':1942 'consist':246,634 'const':157,193,385,510,645,653,964 'contain':19 'content':27,80,199,277,290,354,755,811,824,1097,1127,1142,1157,1207,1541,1796,1819,1914,1917 'continu':584 'convers':1939 'convert':58,67,75,102,110,1455 'convert-to':74,109 'copi':1717 'correct':504 'correspond':802 'count':1073 'creat':34,42,140,209,579,923,1279,1651 'creation':7 'critic':230,603,628,636,835,875,1144,1208,1535,1887 'custom':1103,1151,1401,1618,1620 'custom-width':1102 'd5e8f0':709 'data':854 'date':1017 'day':1788 'default':234,303,375,390,398,1181,1192,1221 'delet':1765,1767,1789,1806,1821,1838,1850,1858,1860,1862,1895 'depend':1926 'desc':866 'descript':865 'destin':926 'differ':592,1507 'digit':1755 'dimens':321,1237 'direct':1513 'dividers/rules':1353 'doc':59,63,194,201,386,511,677,748,789,965,1300 'doc.docx':205,226 'document':36,44,48,56,127,142,158,196,388,391,513,967,1233,1431,1936 'document.doc':78 'document.docx':92,100,113,1444,1642 'document.pdf':118 'document.xml':1627,1874,1924 'docx':1,6,13,39,61,77,144,154,192,232,313,347,1212,1219,1239,1652,1930,1934 'docx-j':38,231,312,346,1211,1218,1238 'dot':1037 'doubl':1570,1572 'dual':606,1303 'durableid':1663 'dxa':257,263,281,284,672,686,765,1084,1230,1293,1319 'e.g':1016,1039,1757 'edg':334,341,364,1246,1250 'edit':8,46,50,54,69,1429,1465,1477,1479,1511,1527,1777 'element':1263,1684,1694,1738 'empti':1361,1829 'ensur':1320 'entir':1693,1790,1817 'entiti':1460,1551,1562 'environ':1945 'equal':793,1067 'equal-width':1066 'equalwidth':1088,1106,1113 'escap':1589 'etc':1416,1428,1461,1733 'exact':402,1324,1412,1530 'example.com':917 'exist':47,55,1430 'explicit':244,1217,1502 'extern':901 'externalhyperlink':171,907 'extract':83,1446,1929 'fail':216 'fals':1109,1114,1470,1655 'file':14,21,64,145,211,1480,1583,1903 'fill':708 'fix':218,1662,1680 'flag':1879 'flow':1098 'follow':1432 'font':376,393,426,456,1731 'footer':167,1191,1194,1386 'footnot':962,968 'footnotereferencerun':174,996,1004 'forc':1128 'format':521,538,1716 'fs.readfilesync':855 'fs.writefilesync':204 'full':820 'full-width':819 'g':153,1933 'gap':1080 'generat':143 'gif':851 'googl':676,747,788,1299 'grew':993 'h1':1424 'h2':1427 'handl':325,1578 'hang':531,549 'head':370,413,443,470,929,1145,1404 'header':166,1180,1183,1190 'headers/footers':1163,1365 'heading1':411,1414 'heading2':441,1415 'headinglevel':184,1148,1398 'headinglevel.heading':471,930 'headingstylerang':1160 'headless':73,108 'height':258,289,337,343,860,1252,1357 'hello':1561 'hex':1756 'hyperlink':899,915,959,1158 'id':403,410,440,935,1413,1667 'imag':104,833,1899,1902,1951 'image.png':856 'imagerun':165,844,1282 'import':400 'inch':255,261,274,286,689,1087,1179 'includ':1363,1417 'incompat':786 'incorrect':623 'indent':528,546 'independ':580 'inject':1708 'input.docx':138 'insert':486,1761,1763,1836,1841,1844,1852 'insid':879,1712,1769,1815,1839,1883,1893 'instal':150,152,1932 'instead':1381,1771,1774 'intern':317,726,807,918,1243 'internalhyperlink':172,950 'introduc':1523 'introduct':1048 'invalid':1280,1683 'item':494,502,564,576,1792,1831 'javascript':147,156,229,328,384,482,627,749,834,874,900,963,1008,1065,1143,1164 'jpeg':115,850 'jpg':849 'js':40,233,314,348,1213,1220,1240 'keep':379 'landscap':310,1234 'last':1741 'layout':1064 'leader':1038,1058 'leading/trailing':1749 'leav':1827 'left':271,357,529,547,659,720,829,1175,1335,1564,1569 'legaci':62 'let':323 'letter':239,295,758,1226 'level':518,519,535,536,558,570 'levelformat':170 'levelformat.bullet':509,522,1269 'levelformat.decimal':539 'libreoffic':134,1937 'line':1015,1093 'link':902,916,919,943 'list':477 'long':340,363,1249 'maintain':1729 'malform':1681 'manual':485 'margin':264,275,293,358,360,715,761,805,832,1168,1328,1330 'mark':1779,1801,1804 'marker':1625,1872,1882 'match':801,1312 'merg':1451,1468,1474,1809 'merge-run':1467 'methodolog':984 'metric':1002 'minim':1776 'minimum':1356 'minus':828 'miss':1668,1686 'modifi':1856 'multi':1062 'multi-column':1061 'multipl':1581 'must':65,681,774,792,800,877,1107,1146,1274,1311,1585,1752 'n':1259 'name':412,442,867,868,1027,1508,1622 'natur':1099 'need':605,1302 'nest':1685,1837,1881 'never':478,484,784,1257,1264,1294,1344,1349,1892 'new':35,43,141,195,387,468,474,489,492,496,499,512,553,561,565,573,663,691,694,732,735,840,843,882,885,890,895,897,903,906,909,927,933,938,946,949,952,966,971,979,987,990,995,998,1003,1021,1024,1028,1043,1046,1049,1052,1116,1122,1134,1153,1182,1185,1188,1193,1196,1199,1202,1540,1935 'next':417,447,1812 'normal':416,418,446,448 'npm':151,1931 'number':506,514,534,555,567,569,575,581,1075,1271 'o':93 'opposit':1018 'order':1437,1739 'orient':311,344,1255 'origin':1641,1719 'outlinelevel':434,436,464,1418 'output.docx':139,1640 'output.md':94 'overrid':366,405,1406 'overview':11 'pack':1635 'packer':159 'packer.tobuffer':200 'pad':725,808,1341 'page':119,227,242,250,279,826,872,898,1167,1201,1215 'pagebreak':190,876,886,1273 'pagebreakbefor':889,892 'pagenumb':189 'pagenumber.current':1205 'pageorient':169 'pageorientation.landscape':345,1256 'pandoc':28,87,1927 'paper':287 'paragraph':160,428,458,469,490,497,527,545,554,566,733,841,881,883,891,904,928,947,972,980,988,1022,1044,1186,1197,1262,1277,1380,1405,1799,1803,1813,1818 'paragraph/list':1830 'paragraphs/list':1791 'paragraphstyl':399 'paramet':837 'parent':1606,1878,1885 'pass':319,332,339,1235,1244 'pattern':1488 'pdf':112,1938 'pdftoppm':114,1949 'percentag':673 'pitfal':1691 'platform':626 'png':846,848 'png/jpg/etc':1287 'poppler':1948 'portrait':320,1236 'posit':1035 'positionaltab':175,1053 'positionaltabalign':176 'positionaltabalignment.right':1055 'positionaltablead':178 'positionaltableader.dot':1059 'positionaltabrelativeto':177 'positionaltabrelativeto.margin':1057 'pre':1588 'pre-escap':1587 'preserv':1671,1715,1746 'pretti':1449 'pretty-print':1448 'prevent':642 'print':1450 'produc':124,1553 'properti':249,1071,1111,1166 'python':71,98,106,136,224,1442,1520,1592,1600,1612,1637 'quick':22 'quickformat':419,449 'quot':1457,1538,1548,1555,1560 'r':116 'raw':32,95 'read':79 'read/analyze':26 'readabl':383,1340 'reduc':810 'refer':23,516,533,556,568,578,583,593,921,1485,1632,1735,1922 'regener':1665 'reject':1832 'relationship':1687,1908 'relativeto':1056 'remov':1794 'render':622,635,1359 'repack':52,222 'repair':1647,1660,1677 'replac':1516,1534,1692,1699 'repli':1604,1608,1876 'report':975 'request':1503 'requir':133,191,437,839,847,871,1283,1397,1419 'restart':594 'restor':1846 'result':247 'revenu':992 'right':267,359,661,722,831,1010,1171,1337,1566,1571 'right-align':1009 'row':690 'rsid':1751 'rule':780,1209 'run':392,421,451,1453,1469,1473,1714,1720,1727,1866 'sandbox':1944 'schema':1688,1736 'script':1521,1522 'scripts/accept_changes.py':137 'scripts/comment.py':1593,1601,1613 'scripts/office/pack.py':1638 'scripts/office/soffice.py':72,107,1947 'scripts/office/unpack.py':99,1443 'scripts/office/validate.py':225 'section':197,248,466,551,985,1070,1110,1135,1165,1393 'sectiontyp':182 'sectiontype.next':1138 'see':41,53,955,981,1390,1483,1628,1868 'separ':1090,1261 'set':241,608,630,703,1214,1254,1289 'setup':155 'shade':707,1348 'shadingtyp':187 'shadingtype.clear':638,711,1343 'short':333,1245 'show':1529 'sibl':1705,1890 'singl':1565,1567 'size':228,243,251,280,329,395,422,452,649,666,698,767,1216,1371,1732 'skill':2,3 'skip':1472,1657 'smart':1456,1537,1554 'solid':640,714,1345 'sourc':973 'source-anthropics' 'space':429,459,1078,1120,1376,1670,1745,1750 'specifi':1286 'standalon':1278 'step':1435,1438,1475,1633,1869 'stop':1007,1389,1392 'string':1515 'style':365,389,409,526,544,647,914,958,1042,1152,1369,1402,1410 'sum':682,752,775,795,1315 'support':378 'surviv':1464 'svg':853 'swap':315,327,349,1241 'tab':1006,1388,1391 'tabl':162,602,604,613,621,631,664,684,738,750,777,790,822,1140,1155,1290,1301,1313,1347,1351,1395 'tablecel':164,695 'tableofcont':183,1154 'tablerow':163,692 'tabstop':1032 'tabstopposit':180 'tabstopposition.max':1036 'tabstoptyp':179 'tabstoptype.right':1034 'tag':1711 'task':24 'term':1784 'text':82,523,540,911,954,1012,1544,1584,1597,1605,1616,1764,1768,1845,1861,1863,1897,1898,1928 'textrun':161,475,493,500,562,574,736,896,910,939,953,991,999,1025,1029,1047,1050,1189,1200,1203 'three':870 'titl':380,476,863,864,1020 'tjanuari':1030 'toc':439,1041,1396,1421 'toc-styl':1040 'tool':1512,1528 'top':265,655,716,1169,1331 'track':85,89,121,130,1495,1697,1709,1725,1759 'track-chang':88 'transform':857 'true':420,425,450,455,893,1089,1091,1159 'two':1384 'two-column':1383 'type':668,700,710,769,836,845,1033,1137,1284,1915,1918 'u2022':501 'unicod':480,1266 'unit':282 'univers':377 'unless':1499 'unnecessari':1524 'unpack':30,49,101,217,1440,1445,1594,1602,1614,1639 'unpacked/word':1482 'us':238,294,757,1225,1232 'use':37,361,371,401,479,505,637,671,742,782,823,888,1000,1136,1147,1224,1258,1260,1265,1268,1295,1329,1342,1350,1366,1387,1411,1466,1489,1504,1509,1536,1549,1575,1653,1770,1877 'user':1501 'valid':149,207,212,215,1643,1654,1666 'vertic':1092 'verticalalign':188 'via':1946 'violat':1689 'whitespac':1674,1742 'whole':1701 'width':252,288,291,330,336,355,607,615,632,665,685,697,730,739,751,756,766,778,779,791,799,817,821,825,827,858,1068,1104,1118,1124,1248,1291,1304,1309,1314 'width/height':316,1242 'widthtyp':186 'widthtype.dxa':669,701,743,770,783 'widthtype.percentage':744,785,1296 'without':619,1822 'won':1678 'word/_rels/document.xml.rels':1910 'word/media':1905 'write':1519 'wrong':483 'x':1228 'xml':20,33,51,96,220,353,1281,1447,1459,1478,1484,1550,1556,1582,1590,1631,1649,1669,1682,1734,1744,1762,1766,1782,1816,1842,1859,1894,1911,1919,1920,1925 'zip':17","prices":[{"id":"d5c38b2f-4b32-4491-8056-62434afc526d","listingId":"0a987b62-124e-4af4-a292-8942e73e537e","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"anthropics","category":"skills","install_from":"skills.sh"},"createdAt":"2026-04-18T20:23:41.337Z"}],"sources":[{"listingId":"0a987b62-124e-4af4-a292-8942e73e537e","source":"github","sourceId":"anthropics/skills/docx","sourceUrl":"https://github.com/anthropics/skills/tree/main/skills/docx","isPrimary":false,"firstSeenAt":"2026-04-18T21:24:24.953Z","lastSeenAt":"2026-04-24T00:50:10.376Z"},{"listingId":"0a987b62-124e-4af4-a292-8942e73e537e","source":"skills_sh","sourceId":"anthropics/skills/docx","sourceUrl":"https://skills.sh/anthropics/skills/docx","isPrimary":true,"firstSeenAt":"2026-04-18T20:23:41.337Z","lastSeenAt":"2026-04-24T02:40:12.317Z"}],"details":{"listingId":"0a987b62-124e-4af4-a292-8942e73e537e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"anthropics","slug":"docx","source":"skills_sh","category":"skills","skills_sh_url":"https://skills.sh/anthropics/skills/docx"},"updatedAt":"2026-04-24T02:40:12.317Z"}}