界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
文档与办公 · SKILL.md

docx

docx

【文档与办公】Generate Word documents programmatically with the docx library — create paragraphs, tables, images, headers, footers, numbered lists, and styled content. Use when tasks involve generating contracts, proposals, resumes, or any .docx output from application data in Node.js.

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

Tterminalskills / skillsApache-2.0

技能说明

GitHub

name: docx description: >- Generate Word documents programmatically with the docx library — create paragraphs, tables, images, headers, footers, numbered lists, and styled content. Use when tasks involve generating contracts, proposals, resumes, or any .docx output from application data in Node.js. license: Apache-2.0 compatibility: "Node.js 14+ or browser" metadata: author: terminal-skills version: "1.0.0" category: documents tags: ["docx", "word", "document", "reports", "office"]

docx

Generate .docx files from code. No Word installation needed.

Setup

# Install the docx library for Word document generation.
npm install docx

Basic Document

// src/docx/basic.ts — Create a Word document with a heading, paragraph, and save.
import { Document, Packer, Paragraph, TextRun, HeadingLevel } from "docx";
import fs from "fs";

const doc = new Document({
  sections: [
    {
      children: [
        new Paragraph({
          heading: HeadingLevel.HEADING_1,
          children: [new TextRun({ text: "Monthly Report", bold: true })],
        }),
        new Paragraph({
          spacing: { before: 200 },
          children: [
            new TextRun("This report covers performance metrics for "),
            new TextRun({ text: "January 2025", bold: true }),
            new TextRun(". All figures are preliminary."),
          ],
        }),
      ],
    },
  ],
});

const buffer = await Packer.toBuffer(doc);
fs.writeFileSync("report.docx", buffer);

Tables

// src/docx/tables.ts — Create a formatted table with header row and data.
import {
  Document, Packer, Paragraph, Table, TableRow, TableCell,
  TextRun, WidthType, BorderStyle, ShadingType,
} from "docx";
import fs from "fs";

function createHeaderCell(text: string): TableCell {
  return new TableCell({
    children: [new Paragraph({ children: [new TextRun({ text, bold: true, color: "FFFFFF" })] })],
    shading: { type: ShadingType.SOLID, color: "3498DB" },
  });
}

function createCell(text: string): TableCell {
  return new TableCell({
    children: [new Paragraph(text)],
  });
}

const table = new Table({
  width: { size: 100, type: WidthType.PERCENTAGE },
  rows: [
    new TableRow({ children: [createHeaderCell("Name"), createHeaderCell("Revenue"), createHeaderCell("Growth")] }),
    new TableRow({ children: [createCell("Product A"), createCell("$45,000"), createCell("+12%")] }),
    new TableRow({ children: [createCell("Product B"), createCell("$32,000"), createCell("+8%")] }),
  ],
});

const doc = new Document({ sections: [{ children: [table] }] });
const buffer = await Packer.toBuffer(doc);
fs.writeFileSync("table.docx", buffer);

Images

// src/docx/images.ts — Embed images in a Word document from file or URL.
import { Document, Packer, Paragraph, ImageRun } from "docx";
import fs from "fs";

const imageBuffer = fs.readFileSync("logo.png");

const doc = new Document({
  sections: [
    {
      children: [
        new Paragraph({
          children: [
            new ImageRun({
              data: imageBuffer,
              transformation: { width: 200, height: 60 },
              type: "png",
            }),
          ],
        }),
        new Paragraph("Company logo above."),
      ],
    },
  ],
});

const buffer = await Packer.toBuffer(doc);
fs.writeFileSync("with-image.docx", buffer);

Headers, Footers, and Page Numbers

// src/docx/headers.ts — Add headers and footers with page numbers.
import {
  Document, Packer, Paragraph, TextRun, Header, Footer,
  PageNumber, AlignmentType,
} from "docx";
import fs from "fs";

const doc = new Document({
  sections: [
    {
      headers: {
        default: new Header({
          children: [
            new Paragraph({
              alignment: AlignmentType.RIGHT,
              children: [new TextRun({ text: "Confidential", italics: true, color: "999999" })],
            }),
          ],
        }),
      },
      footers: {
        default: new Footer({
          children: [
            new Paragraph({
              alignment: AlignmentType.CENTER,
              children: [
                new TextRun("Page "),
                new TextRun({ children: [PageNumber.CURRENT] }),
                new TextRun(" of "),
                new TextRun({ children: [PageNumber.TOTAL_PAGES] }),
              ],
            }),
          ],
        }),
      },
      children: [
        new Paragraph({ text: "Document content goes here." }),
      ],
    },
  ],
});

const buffer = await Packer.toBuffer(doc);
fs.writeFileSync("with-headers.docx", buffer);

Lists

// src/docx/lists.ts — Create bulleted and numbered lists.
import { Document, Packer, Paragraph, TextRun, AlignmentType } from "docx";
import fs from "fs";

const doc = new Document({
  numbering: {
    config: [
      {
        reference: "numbered-list",
        levels: [
          { level: 0, format: "decimal", text: "%1.", alignment: AlignmentType.LEFT },
        ],
      },
    ],
  },
  sections: [
    {
      children: [
        new Paragraph({ text: "Action Items:", heading: "Heading2" as any }),
        ...[
          "Review Q1 metrics",
          "Update pricing model",
          "Schedule team sync",
        ].map(
          (item) =>
            new Paragraph({
              children: [new TextRun(item)],
              numbering: { reference: "numbered-list", level: 0 },
            })
        ),
      ],
    },
  ],
});

const buffer = await Packer.toBuffer(doc);
fs.writeFileSync("lists.docx", buffer);
我的收藏