生成 Office Open XML 文档。
用纯 JSON 或全类型 TypeScript 创建 .docx、.pptx 和 .xlsx 文件,并读取旧版 Office、RTF 与 ODF 输入——AI 代理与手写代码同样顺手。
{
"sections": [
{
"children": [
{ "paragraph": { "children": [{ "text": "Hello, World!", "bold": true }] } }
]
}
]
}
pnpm add office-open
npm install office-open
yarn add office-open
bun add office-open
JSON 与 TypeScript
把文档定义为纯数据——零类、零样板——冻结 JSON Schema 直接支撑工具调用。
丰富内容
段落、表格、图表、图片、SmartArt、数学公式、页眉、页脚等。
类型安全
全面的 TypeScript 类型定义,边写边补全、边写边报错。
跨平台
支持 Node.js、浏览器、Deno 和 Bun,可导出 Buffer、Blob、Base64、流或字符串。
核心 OOXML 完整实现
完整覆盖 17 个核心 OOXML Transitional schema 的全部元素与属性,生成解析双向;较新的 Word 扩展另行追踪。
模块化包
按格式按需安装——包括旧版格式读取与 ODF——统一包另附 CLI 与 AI SDK 工具。
使用 JSON 或 TypeScript 构建文档
把文档定义为纯 JSON 对象,或使用 TypeScript API 获得完整的 IDE 体验——两者生成同样有效的 OOXML 标记。
创建 Word 文档,支持段落、表格、图片和图表
创建 PowerPoint 演示文稿,支持形状、动画和切换效果
创建 Excel 电子表格,支持样式、图表和数据验证
高性能,原生 zlib 压缩与流式输出
{
"sections": [
{
"children": [
{
"table": {
"rows": [
{ "cells": [{ "children": [{ "paragraph": "Name" }] }, { "children": [{ "paragraph": "Role" }] }] },
{ "cells": [{ "children": [{ "paragraph": "Alice" }] }, { "children": [{ "paragraph": "Engineer" }] }] },
{ "cells": [{ "children": [{ "paragraph": "Bob" }] }, { "children": [{ "paragraph": "Designer" }] }] }
]
}
}
]
}
]
}
{
"slides": [
{
"children": [
{
"shape": {
"x": 100, "y": 100, "width": 760, "height": 340,
"textBody": { "paragraphs": [{ "children": [{ "text": "Hello, World!", "size": 32 }] }] }
}
}
]
}
]
}
{
"worksheets": [
{
"name": "Sheet1",
"rows": [
{ "cells": [{ "value": "Name" }, { "value": "Score" }] },
{ "cells": [{ "value": "Alice" }, { "value": 95 }] },
{ "cells": [{ "value": "Bob" }, { "value": 88 }] }
]
}
]
}
读取和修改现有文件
将 .docx、.pptx 和 .xlsx 文件解析为结构化对象,或替换 {{占位符}} 标记修补模板。
读取文档结构、样式和内容
替换模板占位符为新内容
解析、修改、重新导出一站式流水线
import { parseDocument, patchDocument } from "@office-open/docx";
// 解析现有文件
const opts = await parseDocument(buffer);
// opts.sections — 文档节
// opts.title, opts.creator — 核心属性
// 修补模板占位符
const result = await patchDocument({
outputType: "uint8array",
data: buffer,
placeholders: {
name: { type: "paragraph", children: [{ text: "John" }] },
},
});
import { parsePresentation, patchPresentation } from "@office-open/pptx";
// 解析现有文件
const opts = await parsePresentation(buffer);
// opts.slides — 幻灯片数组
// opts.size, opts.title — 演示文稿属性
// 修补模板占位符
const result = await patchPresentation({
outputType: "uint8array",
data: buffer,
placeholders: {
title: [{ text: "已更新", bold: true }],
},
});
import { parseWorkbook, patchWorkbook } from "@office-open/xlsx";
// 解析现有文件
const opts = await parseWorkbook(buffer);
// opts.worksheets — 工作表数组
// opts.styles — 样式定义
// 修补模板占位符
const result = await patchWorkbook({
outputType: "uint8array",
data: buffer,
placeholders: {
name: "张三",
},
});