XLSX
@office-open/xlsx
使用声明式 TypeScript API 生成 .xlsx 电子表格
安装
pnpm add @office-open/xlsx
快速开始
{
"worksheets": [
{
"name": "Sheet1",
"children": [
{ "cells": [{ "value": "Name" }, { "value": "Score" }] },
{ "cells": [{ "value": "Alice" }, { "value": 95 }] },
{ "cells": [{ "value": "Bob" }, { "value": 88 }] }
]
}
]
}
import { Workbook, Packer } from "@office-open/xlsx";
const wb = new Workbook({
worksheets: [
{
name: "Sheet1",
children: [
{ cells: [{ value: "Name" }, { value: "Score" }] },
{ cells: [{ value: "Alice" }, { value: 95 }] },
{ cells: [{ value: "Bob" }, { value: 88 }] },
],
},
],
});
const buffer = await Packer.toBuffer(wb);
主要组件
| 组件 | 说明 |
|---|---|
Workbook | 根工作簿容器,包含工作表和属性 |
Worksheet | 单个工作表,包含单元格、样式和功能 |
Cell | 单元格,包含值、样式和格式 |
Row | 行容器,可设置高度和可见性 |
Column | 列定义,可设置宽度和范围 |
Styles | 基于索引的样式系统(字体、填充、边框) |
SharedStrings | 共享字符串表,用于字符串去重 |
补丁修改
通过替换 {{placeholder}} 占位符来修改已有的 .xlsx 模板:
import { patchWorkbook } from "@office-open/xlsx";
const result = await patchWorkbook({
outputType: "nodebuffer",
data: templateBuffer,
patches: {
name: { value: "John Doe" },
amount: { value: 1500 },
date: { value: "2024-12-31" },
},
});
完整文档请参阅补丁修改。
解析
将已有的 .xlsx 文件解析为 WorkbookOptions,用于检查或往返工作流:
import { parseWorkbook } from "@office-open/xlsx";
const opts = parseWorkbook(buffer);
// opts.worksheets — 工作表数组
// opts.worksheets[0].children — 包含单元格的行
// opts.title, opts.creator — 核心属性
完整文档请参阅解析。
导出格式
每个异步方法都有对应的同步版本(例如 toBufferSync)。完整列表请参阅导出页面。
| 方法 | 返回值 | 适用场景 |
|---|---|---|
Packer.toBuffer(wb) | Buffer | Node.js 文件 I/O |
Packer.toBlob(wb) | Blob | 浏览器下载 |
Packer.toBase64String(wb) | string | Data URL、API 负载 |
Packer.toString(wb) | string | 调试、检查 |
Packer.toStream(wb) | ReadableStream<Uint8Array> | 流式传输大文件 |