XLSX

解析

解析、检查和往返 .xlsx 文件

本库提供两个层级的解析 API:

  • parseWorkbook — 高层往返 API,返回 WorkbookOptions
  • parseXlsx — 底层 API,提供对 .xlsx 文件原始 XML 部件的访问

两个函数均接受任意 DataType 输入:Uint8ArrayArrayBufferDataViewnumber[]、base64 字符串等。

往返解析(parseWorkbook)

parseWorkbook 函数将 .xlsx 文件解析为与 Workbook 构造函数相同的 WorkbookOptions 格式,支持完整的往返流程(导出 -> 解析 -> 重新导出):

import { Workbook, Packer, parseWorkbook } from "@office-open/xlsx";
import { readFileSync } from "node:fs";

// 解析已有的 .xlsx 文件
const opts = parseWorkbook(readFileSync("input.xlsx"));

// 如需修改单元格,然后重新导出
const wb = new Workbook(opts);
const buffer = await Packer.toBuffer(wb);

返回的选项包含与输入格式相同的结构:

{
  "title": "My Workbook",
  "creator": "Author",
  "worksheets": [
    {
      "name": "Sheet1",
      "children": [
        { "cells": [{ "value": "Name" }, { "value": "Score" }] },
        { "cells": [{ "value": "Alice" }, { "value": 95 }] }
      ],
      "columns": [{ "min": 1, "max": 1, "width": 15 }],
      "mergeCells": [{ "from": { "row": 1, "col": 1 }, "to": { "row": 1, "col": 2 } }],
      "freezePanes": { "row": 1 },
      "autoFilter": "A1:B2"
    }
  ]
}

解析字段

字段来源说明
worksheetsxl/worksheets/sheet{n}包含 children 和选项的工作表数组
titledocProps/core.xml工作簿标题
creatordocProps/core.xml作者名称
subjectdocProps/core.xml主题
keywordsdocProps/core.xml关键词
descriptiondocProps/core.xml描述
lastModifiedBydocProps/core.xml最后修改者
revisiondocProps/core.xml修订版本号

工作表解析字段

字段说明
name工作表名称
children行数组,每行包含 cells
columns列定义(含宽度)
mergeCells合并单元格区域
freezePanes冻结窗格配置
autoFilter自动筛选区域字符串
dataValidations数据验证规则
conditionalFormats条件格式规则

底层解析(parseXlsx)

parseXlsx 函数读取 .xlsx 文件并提供对其原始 XML 部件的访问:

import { parseXlsx } from "@office-open/xlsx";
import { readFileSync } from "node:fs";

const doc = parseXlsx(readFileSync("input.xlsx"));

// 访问工作簿元素
console.log(doc.workbook);

// 访问工作表路径
console.log(doc.worksheets);

// 访问样式元素
console.log(doc.styles);

// 访问共享字符串元素
console.log(doc.sharedStrings);

XlsxDocument API

返回的 XlsxDocument 对象包含:

属性类型说明
docParsedArchive完整的已解析归档(所有部件)
workbookElement | undefined工作簿元素(xl/workbook.xml
worksheetsstring[]工作表路径
stylesElement | undefined样式元素
sharedStringsElement | undefined共享字符串元素
partRefsXlsxPartRefs图表、媒体、绘图的引用
corePropsstring | undefined核心属性路径
appPropsstring | undefined应用属性路径

访问部件

const doc = parseXlsx(data);

// 通过路径获取所有部件
const workbook = doc.doc.get("xl/workbook.xml");
const styles = doc.doc.get("xl/styles.xml");
const sheet1 = doc.doc.get("xl/worksheets/sheet1.xml");

// 部件引用映射到路径
for (const path of doc.partRefs.worksheets) {
  const sheet = doc.doc.get(path);
}

操作 XML 元素

已解析的元素使用 @office-open/xml 库的 Element 类型:

import { attr } from "@office-open/xml";

// 访问元素属性
for (const child of doc.workbook?.elements ?? []) {
  console.log(child.name);
}

使用场景

  • 往返处理 -- 解析 .xlsx,修改单元格,重新导出
  • 提取数据 -- 遍历工作表行以提取单元格值
  • 合并工作簿 -- 解析多个 .xlsx 文件并合并其工作表
  • 检查格式 -- 读取样式定义和数字格式
  • 转换 -- 修改已解析的元素并重建工作簿
Copyright © 2026