XLSX 与 JSON 的本质差异
将 XLSX 转换为 JSON 并非简单的格式换装。XLSX 文件实质是一个 ZIP 压缩包,内部包含多层 XML 文件,用于存储多个工作表、单元格类型(文本、数字、日期、布尔值)、公式以及丰富的格式化信息。而 JSON 是一种类型化、可嵌套的数据格式,支持对象、数组、数字、布尔值和 null。因此,当转换发生时,数字和布尔单元格值可以被保留为 JSON 的原生类型(而非被迫成为带引号的字符串)。这与 CSV 截然不同:CSV 将每一行压扁为纯文本行,丢失了类型信息。转换过程中,单元格样式、合并单元格、格式(字体、颜色、边框)以及所有非首个工作表的数据均被丢弃。关键点在于:JSON 虽然能表示对象键值对,但 XLSX 表中的数据本身是扁平的,不会自动生成嵌套结构——你得到的始终是一个数组对象,每个对象对应一行,列名作为键。
转换规则:仅第一工作表与单元格类型映射
工作表选择
工具只读取 XLSX 文件的第一个工作表。如果你需要其他工作表中的数据,必须手动将该工作表移至首位,或使用其他工具分别导出。
单元格类型映射
| XLSX 类型 | JSON 类型 | 示例(原始值 → JSON 输出) |
|---|---|---|
| 文本 (string) | 字符串 | "Hello" → "Hello" |
| 数字 (number) | 数字 | 123 → 123,3.14 → 3.14 |
| 布尔值 (boolean) | 布尔值 | TRUE → true,FALSE → false |
| 日期 (date) | 字符串(ISO 格式) | 2024-01-15 → "2024-01-15T00:00:00.000Z" |
| 公式 (formula) | 根据存储值映射 | 若公式结果为数字,则输出数字;若为文本,则输出字符串 |
注意:日期在 Excel 中本质上是一个数字(例如,2023 年 8 月 15 日为 45144),转换器将其写入 UTC 格式的 ISO 8601 字符串,例如 "2023-08-15T00:00:00.000Z"。转换时工具使用可见值,即 Excel 最后一次保存的计算结果。如果公式单元格为空或未计算,则输出空字符串。
公式为何丢失:存储值与计算结果的差异
XLSX 文件中的公式(如 =SUM(A1:A10))存储的是计算公式本身,而非实时计算后的值。当你在 Excel 中打开文件时,Excel 会重新计算所有公式,并将结果写入文件的可选“计算值”字段。该工具不执行计算引擎,它只提取最后一次保存时写入的“可见值”。因此,如果你有一个包含公式但从未保存过结果的文件(例如直接从第三方系统生成且未经过 Excel 计算),转换后的 JSON 中该单元格可能是空值。这也是为什么所有公式(包括条件格式、数组公式)都无法保留的原因:它们超出了纯数据转换的范畴。
客户端处理的隐私优势
整个转换过程完全在浏览器中完成。你的浏览器解析工作簿——一个 XML 部分的 ZIP 包——并在你的设备上写入转换后的输出。你上传的 XLSX 文件不会离开你的设备,也不会发送到服务器。这意味着:
- 无隐私风险:敏感财务数据、客户名单或内部报告不会上传到任何服务器。
- 速度快:对于文件大小限制内的文件,转换可在几秒钟内完成。没有网络延迟。
该工具不发送任何 HTTP 请求,不存储任何数据。这与众多要求你上传文件到云端解析的在线转换器形成根本区别。
常见错误与限制
文件与数据限制
页面会显示以下错误信息:
- “Choose a CSV, JSON or XLSX file.” —— 上传了不支持的格式。
- “This Excel file could not be opened.” —— 当文件损坏或无法解析时。
- “This file has no table rows.” —— 第一个工作表无数据行。
- “This file is too large. Use a file under ‹max›.” —— 文件大小超限,文件大小限制为 8 MB。
- “Could not convert this file.” —— 未知转换错误。
- “Conversion cancelled.” —— 用户手动取消。
- “这次转换耗时太久,请换一个更小的文件。” —— 处理超时,转换时间超过约 12 秒。
常见陷阱
- 合并单元格:合并区域仅左上角单元格有值,其余单元格为空字符串。输出 JSON 中这些位置可能显示为空字符串。
- 隐藏行/列:它们仍被读取并出现在输出中,导致 JSON 包含“空白”数据。
- 非矩形表:如果标题行跨越多行,工具仅将第一行识别为列名,后续多余行被视为数据行,可能导致结构错乱。
- 空行:如果 Excel 中因格式刷导致大量空行,它们会被当作有效行(值为 null),污染输出。建议转换前清理空行。
适用人群与场景
- 前端开发人员:获取 Excel 中的 API 配置数据,直接转换为 JSON 以供前端读取。类型化转换使他们无需编写在每个字符串字段上调用
Number()的循环。 - 数据分析师:将季度报表(XLSX)快速转为机器可读格式,用于后续 Python 或 SQL 处理。
- 跨团队协作:外部合作伙伴偏好 JSON,而内部用 Excel 维护,一次性转换无需安装软件。
- 隐私敏感用户:不愿将财务或人事数据上传到第三方服务器。
常见问题(FAQ)
Q: 转换后的 JSON 中的日期为什么是字符串而不是时间戳?
A: 日期被转换为 ISO 8601 字符串(例如,"2023-08-15T00:00:00.000Z")。原始 Excel 格式掩码被丢弃。如果你需要特定日期格式,必须对 ISO 字符串进行后处理。
Q: 我的公式结果没有出现,单元格是空的,为什么?
A: 工具只读取最后一次保存的“可见值”。如果公式从未保存过(例如只编辑未保存),则没有值可读取。请先在 Excel 中打开文件并保存一次,确保公式被计算并存储。
Q: 能否同时转换多个工作表?
A: 不能。工具只处理第一个工作表。若需要其他表,请复制到新文件或使用其他工具。
Q: 合并单元格在 JSON 中如何表示?
A: 只有合并区域的左上角单元格有值,其余单元格在 JSON 中为空字符串。建议在 Excel 中取消合并并填充数据后再转换。
Q: 转换后 JSON 文件体积比原 XLSX 大很多,正常吗?
A: 正常。XLSX 是压缩格式,而 JSON 是纯文本,结构可能更冗长(重复键名)。特别是当表头较长时,体积可能数倍于原文件。可以使用 JSON 压缩(minify)技术减小体积。
Q: 是否支持.xls(旧格式)?
A: 不支持。工具仅接受.xlsx 文件(Office 2007+ 格式)。旧版.xls 文件需要先转换为.xlsx。