XLSX

导出

将工作簿导出为 Buffer、Blob、Base64 或流

generateWorkbook() 函数根据选项生成 .xlsx 文件,并以指定格式返回结果。使用 generateWorkbookSync() 进行同步生成,使用 generateWorkbookStream() 进行流式生成。

generateWorkbook

返回 Buffer(Node.js 默认)。适用于文件 I/O。

import { generateWorkbook } from "@office-open/xlsx";
import { writeFileSync } from "node:fs";

// 异步(非阻塞)
const buffer = await generateWorkbook({
  /* 选项 */
});
writeFileSync("output.xlsx", buffer);

输出类型

通过第二个参数控制输出格式:

// Uint8Array(跨平台)
const bytes = await generateWorkbook(opts, { type: "uint8array" });

// Blob(浏览器)
const blob = await generateWorkbook(opts, { type: "blob" });

// Base64 字符串(API 负载)
const base64 = await generateWorkbook(opts, { type: "base64" });

// ArrayBuffer
const ab = await generateWorkbook(opts, { type: "arraybuffer" });
type返回值适用场景
"nodebuffer"BufferNode.js 文件 I/O
"uint8array"Uint8Array跨平台原始字节
"blob"Blob浏览器下载
"base64"stringData URL、API 负载
"arraybuffer"ArrayBuffer内存操作

同步变体

使用 generateWorkbookSync() 进行同步生成 -- 阻塞主线程但避免异步开销:

import { generateWorkbookSync } from "@office-open/xlsx";

const buffer = generateWorkbookSync({
  /* 选项 */
});

流式生成

使用 generateWorkbookStream() 处理大型文档 -- 返回 ReadableStream,无需缓冲整个文件:

import { generateWorkbookStream } from "@office-open/xlsx";
import { createWriteStream } from "node:fs";
import { Readable } from "node:stream";

const stream = generateWorkbookStream({
  /* 选项 */
});
Readable.fromWeb(stream).pipe(createWriteStream("output.xlsx"));

压缩选项

所有函数均接受压缩控制参数。默认行为与 Microsoft Office 一致:XML 使用 DEFLATE 级别 1(SuperFast);媒体按类型区分——已压缩格式(PNG/JPEG/GIF)使用 STORE,其余(EMF/WMF/BMP/TIFF)使用 DEFLATE 级别 6 / Normal。

// 默认(MS Office 行为)
await generateWorkbook(opts);

// XML 最大压缩
await generateWorkbook(opts, { compression: { xml: 9 } });

// 不压缩
await generateWorkbook(opts, { compression: { xml: 0 } });
选项类型默认值说明
compression.xmlnumber1DEFLATE 级别 0–9
compression.medianumber6仅可压缩媒体;PNG/JPEG/GIF 始终 STORE

浏览器下载示例

const blob = await generateWorkbook(opts, { type: "blob" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = "output.xlsx";
a.click();
URL.revokeObjectURL(url);
Copyright © 2026