跳到主要内容
Office Open

快速开始

更多格式

解析旧版 Office 与 ODF;生成 RTF 和核心 ODF 文档;并转换 CSV/TSV

总包提供统一的格式探测与解析入口,同时保留现有 options 族。这里没有单独的旧版编辑模型:解析结果会投影到 DocumentOptions、WorkbookOptions 或 PresentationOptions。

#格式矩阵

格式解析生成补丁结果模型
.doc、.xls、.ppt✅❌❌现有文档/工作簿/演示文稿 options
.rtf✅✅❌DocumentOptions
.odt、.ods、.odp✅✅❌规范格式族 options
.csv、.tsv✅✅❌WorkbookOptions 转换

旧版二进制格式有意设计为只读。共享 options 模型仍是 OOXML、编辑器与跨格式转换使用的编辑和持久化契约。

#生成 RTF

ts
import { generateOffice } from "office-open";

const data = await generateOffice("rtf", {
  sections: [{ children: [{ paragraph: "Written as RTF" }] }],
});

RTF 写入器输出 parser 的严格 DocumentOptions 投影。无法表示的 OOXML 专属字段会抛出带规范路径和原因的 RtfGenerateError;受支持数据不会被静默丢弃。

ODF 文档包向下依赖内部 odf 模块;同级 ODF 文档包互不导入,只有总包聚合全部公开编解码器。

ODF 文档包拥有各自的规范类型化 surface。内部 odf 模块负责这些 surface 之外的通用节点覆盖;底层图表与数据库编解码器是实现细节,不在聚合 API 中。

#统一解析

ts
import { readFile } from "node:fs/promises";
import { parseOffice } from "office-open";

const data = new Uint8Array(await readFile("input.doc"));
const parsed = await parseOffice(data);

返回对象包含探测到的 type 与三种 options 族之一。RTF 也支持直接传入字符串。

#生成 ODF

ts
import { generateOffice } from "office-open";

const data = await generateOffice("odt", {
  sections: [{ children: [{ paragraph: "Written as ODT" }] }],
});

ODF 包会存储未压缩且位于包首的 mimetype,并包含符合规范的 ODF 1.3 manifest。

对于规范专用 surface 之外的元素,请使用规范格式族包暴露的受支持 ODF 投影。

reproducible 仅适用于 OOXML OPC 输出。ODT/ODS/ODP 写入器会拒绝该选项,不会静默忽略。

#CSV 与 TSV

ts
import { csvToWorkbook, tsvToWorkbook } from "office-open/convert";

const workbook = csvToWorkbook("name,score\nAda,99");

分隔文本转换遵循 RFC 4180,保留引号字段中的换行,解析值保持字符串而不做类型猜测。