ToolAct工具行动

Excel 转 JSON 工具

上传 Excel 文件,将表格数据转换为 JSON 格式

拖放 Excel 文件到此处,或点击选择文件

什么是 Excel 转 JSON?

Excel 转 JSON 是一个在线数据格式转换工具,可以将 Microsoft Excel(.xlsx/.xls)文件中的表格数据转换为 JSON(JavaScript 对象表示法)格式。Excel 是全球最流行的电子表格软件,广泛用于数据存储、分析和报表制作。JSON 是现代 Web 应用和 API 中最常用的数据交换格式,具有结构清晰、易于解析的优点。使用本工具,您可以快速将 Excel 表格数据转换为 JSON 数组,方便在编程、数据分析和 Web 开发中使用。所有处理均在浏览器本地完成,确保数据安全。

使用方法

使用步骤

  1. 点击上传区域或将 Excel 文件拖入(支持 .xlsx 和 .xls 格式)
  2. 如包含多个工作表,请从下拉菜单中选择需要转换的工作表
  3. 选择是否将第一行作为 JSON 对象的字段名
  4. 格式化后的 JSON 数据将自动生成,可直接复制

电子表格注意事项

  • 在使用生成的 JSON 前,请检查所选工作表、表头行、合并单元格、空行以及日期格式。
  • 电子表格常常同时包含显示格式与原始值,转换后请核对数字和日期。

使用场景

将工作簿中的工作表转为 JSON 用于开发导入 .xlsx 或 .xls 工作簿,选择目标工作表,将其转换为带语法高亮的 JSON,用于 mock 数据、种子数据、下拉选项、本地化初稿或 API 示例。工作簿通过 SheetJS 库在浏览器中读取和解析,客户、人事或内部财务表格在转换过程中不会离开设备。
控制首行是否成为对象键名切换「首行作为字段名」选项,在以列名为键的对象数组和以列位置为索引的数组格式之间切换,再利用行数和字段数统计来发现意外的空白列或选错工作表的情况。这适合作为粘贴输出到实际目标之前的受控中间步骤。
将表格解析保持在本地处理小数据任务页面通过 SheetJS 在浏览器中读取工作簿并直接复制输出结果。它适合可审查的表格,不适合超大文件、公式重算、宏、数据透视表缓存或受保护工作簿的逻辑。在将 JSON 视为权威数据之前,建议在目标系统中做一次快速完整性检查。
区分公式计算值和存储的字符串SheetJS 在浏览器中返回公式的最后缓存值,因此一列由公式生成的合计数在 JSON 中会显示为普通数字,而缓存过期的单元格可能与 Excel 当前显示的结果不一致。在将导出结果视为权威数据之前,快速扫描一下意外的零值或匹配的字符串,如果公式是在上次保存之后添加的,请重新保存工作簿。
在 schema 出错前检查表头行当「首行作为字段名」开启时,重复或空白的列名会产生无效的 JSON 键,部分键名可能被自动重命名。打开 JSON 后搜索 'undefined' 或数字后缀,在需要跨多次导入保持键名稳定时清理源工作表,特别是下游要生成 TypeScript 接口或 GraphQL schema 的情况。

技术原理

现代 .xlsx 工作簿是由 ECMA-376 / ISO/IEC 29500(Office Open XML 标准)定义的 SpreadsheetML 文件:.xlsx 扩展名是一个 ZIP 容器,其内部条目是 XML 文档,位于 xl/worksheets/sheetN.xml,字符串存储在共享字符串表 xl/sharedStrings.xml 中,单元格类型由 t 属性声明(s = 共享字符串,n = 数字,b = 布尔值,str = 内联字符串,d = ISO 8601 日期)。页面使用 FileReader.readAsArrayBuffer 读取上传的 File,然后将 ArrayBuffer 交给 SheetJS(xlsx)处理。XLSX.read(buffer, {type: 'array'}) 返回一个工作簿对象,其 SheetNames 数组驱动工作表选择器,XLSX.utils.sheet_to_json(sheet, options) 遍历单元格网格,生成以表头行为键的对象数组,或传入 header: 1 时生成数组的数组。 旧版 .xls 是二进制 BIFF8 格式(Excel 97-2003),SheetJS 同样通过相同的 read() 入口解码,但使用 type: 'binary'(对应 FileReader.readAsBinaryString)或读取字节时使用 'array'。两种格式的单元格日期值均以序列号存储(Excel 中自 1900 纪元以来的天数,存在历史性的 1900-02-29 闰年 bug,使 1900-03-01 之前的日期偏移一天;当工作簿在 Mac 版 Excel 中设置了 date1904 标志时,以 1904-01-01 为纪元)。转换为 JavaScript Date 的公式为(序列号 - 25569)* 86400 * 1000 毫秒(自 Unix 纪元起),适用于考虑闰年 bug 后的 1900 系统。公式存储在 f 属性中,SheetJS 在 v 中报告其最后缓存结果;如果工作簿由未重新计算的工具保存(例如某些脚本导出),v 可能缺失或过期。 当首行用作表头时,重复或空的表头单元格会迫使 SheetJS 跳过或自动重命名键(如 __EMPTY、__EMPTY_1),这会破坏下游 JSON 契约。合并单元格范围(在 worksheet/mergeCells 中声明)仅在左上角锚点处暴露值,在合并尾部单元格中输出 undefined,因此合并的标题行会产生一条有值的记录和 N - 1 条稀疏记录。对于超过数十兆字节的工作簿,同步的 XLSX.read() 路径可能阻塞 UI 线程;流式替代方案是将解析移入 Web Worker,使主线程保持响应。

  • .xlsx 是 XML 的 ZIP 容器(ECMA-376 / ISO/IEC 29500);.xls 是二进制 BIFF8 格式;SheetJS XLSX.read(buffer, {type: 'array'}) 通过 FileReader.readAsArrayBuffer 处理两者。
  • sheet_to_json 选项:header: 1 返回数组的数组;header: 'A' 使用电子表格列字母;defval: null 用 null 填充稀疏单元格而非丢弃键;raw: false 应用 Excel 显示格式。
  • Excel 日期序列号是自 1900-01-01 以来的天数(含 1900-02-29 闰年 bug;Mac 1904 日期系统为自 1904-01-01 以来的天数);JS Date 毫秒 =(序列号 - 25569)* 86400000(自 Unix 纪元起)。
  • 重复或空的表头单元格变为自动重命名的键(__EMPTY、__EMPTY_1)或静默冲突;在依赖 schema 之前,验证 JSON 中是否包含这些字符串。
  • 合并单元格范围(worksheet.mergeCells)仅在左上角锚点暴露值;合并中的尾部单元格为 undefined,因此合并的标题行产生一条有值的记录和 N-1 条空字段的记录。
  • 公式单元格在 f 中存储表达式,在 v 中存储最后缓存结果;不重新计算就保存的工具会使 v 过期或缺失,SheetJS 原样返回 v。
  • 对于超过约 10 MB 的工作簿,将 XLSX.read 移入 Web Worker;同步解析路径会阻塞 requestAnimationFrame,大工作表可能使标签页冻结数秒。

示例

员工表转 JSON 对象数组

Excel 行(Staff 工作表):
id | name    | dept       | salary
1  | Alice   | Engineering| 8500
2  | Bob     | Sales      | 6200

JSON 输出:
[
  { "id": 1, "name": "Alice", "dept": "Engineering", "salary": 8500 },
  { "id": 2, "name": "Bob",   "dept": "Sales",       "salary": 6200 }
]

多工作表工作簿(orders.xlsx)

工作簿包含工作表:["Customers", "Orders", "Products"]
选择工作表:Orders
首行作为表头:order_id, customer_id, total, date

结果:1,284 行被转换为 JSON 对象
末尾空单元格输出为 null,而不是空字符串

Excel 日期单元格转 ISO 8601 字符串

单元格 A2(Excel 日期格式):46173(Excel 序列号)
Excel 中显示为:2026-06-01

JSON 输出:
{ "order_date": "2026-06-01T00:00:00.000Z" }

说明:Excel 用数字序列存储日期,本工具会统一转换成 ISO 字符串

含空格和中文的表头

表头:"Order No." | "客户姓名" | "金额 (USD)"

JSON 键完整保留:
{
  "Order No.": "A-1024",
  "客户姓名": "王小明",
  "金额 (USD)": 199.50
}

常见问题

我的 Excel 文件会被上传吗?

不会。.xlsx、.xls 或 .csv 文件由 SheetJS 在你的浏览器中解析,文件字节不会离开本机。可在加载文件时打开 Network 面板自行核实。

转换后哪些 Excel 特性会被保留?

保留单元格的值、日期(按选项输出 ISO 字符串或 Excel 序号)、数字、布尔值和文本。图表、图片、条件格式、公式(仅保留缓存的计算值,不保留公式本身)、批注和合并单元格会被丢弃或简化。

所有工作表都会被转换吗?

只转换所选的工作表。请通过下拉菜单选择要导出的工作表。如需多个工作表,可逐个转换。

表头与数据行如何映射到 JSON?

若开启「首行为表头」,结果是以表头单元格为键的对象数组;关闭则输出二维数组(每个元素是单元格值组成的数组)。空单元格在输出中表示为 null。

日期是如何处理的?

Excel 内部用序列号存储日期(自 1900 年以来的天数)。本页默认转换成 ISO 8601 字符串(如 2026-06-13)。切换到「原始」可保留序列号,便于稍后再导回 Excel。仅含时间的单元格会输出为 'T14:30:00' 之类的字符串。

公式会被计算吗?

不会重新求值,只读取上次保存时缓存的计算结果。如果需要最新结果,请先在 Excel 中打开文件,按 F9 重算并保存,然后再上传。

文件大小有上限吗?

受浏览器内存限制。现代台式机一般可处理几百 MB 的工作簿。对于超大文件(百万行以上),请改用桌面脚本工具(Python pandas、Excel Power Query)——浏览器会出现内存溢出。