资讯动态

Excel转JSON全指南:原理、参数配置与避坑实践

发布时间:2026/10/13 13:03:34 来源:尧图企业网站定制
简介Excel转JSON工具是一款面向数据处理人员的轻量转换程序主要解决电子表格数据向JSON格式转化的问题适用于接口联调、数据交换、报表分析等场景服务对象涵盖Web开发、数据分析、自动化运维及日常办公人员。压缩包共31个文件大小约5.44MB内含可直接运行的exe、配套的libxl动态库、完整的C源码头文件与实现文件以及Visual Studio工程配置文件既满足普通用户的即取即用也为开发者提供了二次开发的完整基础。附带的说明文档梳理了行列与JSON对象的映射关系、数值与日期类型差异、嵌套表格整理、空行处理等关键细节可以帮助使用者避开转换过程中常见的格式陷阱。目前已有1018人学习下载对于需要高频处理电子表格与JSON互转的技术人员是一个体积小巧、实用价值明确的工具包。1. 为什么需要 Excel 转 JSON从配置表到代码能直接吃的结构如果你维护过游戏配置表、后台参数表或者运营活动列表大概率经历过这种尴尬业务方只认 Excel程序只认 JSON。每次改配置都要找开发手动转一遍转完还要反复确认「这列是不是字符串」「那个空值为什么没了」。这种重复劳动最大的问题是消耗信任——你永远不知道哪一次转换悄悄吞掉了一列。我最早处理这个问题时写过 Python 脚本能用但换台电脑就要装环境交给非技术同事更是灾难。后来在工具圈子里找到这种 excel 转 json 的 exe 小工具双击打开、拖拽导出三分钟搞定一份合法 JSON。这篇就把这类工具的原理、参数边界和常见翻车点拆开讲适合不想折腾编程环境的策划、运营和前后端同学。2. 转换规则与 JSON 形态表头、Sheet 与四种值的处理逻辑2.1 一张 Excel 表能变出几种 JSON这是选型的前提同一个 xlsx按不同方式解读能生成完全不同的 JSON 结构。工具能力的高低首先就体现在它支持哪几种输出形态。最常用的两种数组形态每个 sheet 行对应一个 JSON 对象整体是一个数组。对象形态Map用某一列作为 key把行对象挂在 key 下面方便按 ID 直接查。举个例子一张物品表有id、name、price三列数组形态长这样[ { id: 1, name: 铁剑, price: 120 }, { id: 2, name: 布衣, price: 80 } ]对象形态则长这样{ 1: { id: 1, name: 铁剑, price: 120 }, 2: { id: 2, name: 布衣, price: 80 } }选择哪种取决于消费端。列表渲染用数组顺手按主键查询用对象更直接。我拿到一个转换工具第一个动作就是找它有没有--type或「导出格式」选项。只有固定输出数组的工具碰到查询场景会很难受。输出形态典型使用场景对应参数数组前端列表渲染、批量导入array对象Map按 ID 快速查找、配置覆盖map原始值数组枚举列表、城市代码表list第三种「原始值数组」适合只有一列数据的表输出[北京, 上海, 广州]这种纯列表。注意不是所有工具都支持拿到工具先看参数列表别默认它有。2.2 表头规则哪一行当 key列名怎么清洗表头是转换的「键来源」绝大部分工具默认第一行作为表头。实际表格里经常出现的情况是第一行是标题第二行才是真正的列名或者表头里混着Item ID、item-id这种带空格和连字符的写法。直接拿去当 JSON 的 key下游代码访问时得写data[Item ID]不仅别扭还容易写错。所以工具需要提供两个能力一是「表头行号」设置让你指定第几行才是真正的列名二是列名清洗规则。常见的清洗动作包括去首尾空格、统一成小写、把非法字符替换成下划线。下面这段逻辑是大多数工具的默认行为def normalize_key(raw: str) - str: key raw.strip() key key.lower() key key.replace( , _).replace(-, _) return key逻辑说明strip()去空格避免id 和id成为两个 keylower()统一大小写把空格和连字符替换成下划线保证 key 符合大部分编程语言的标识符习惯。参数说明如果你的工具提供自定义清洗规则建议开启「非法字符替换」关闭「转小写」——后端字段大小写敏感强行小写可能和已有代码对不上。此外表头重复是常见脏数据同一列名出现两次时有的工具直接报错有的自动加_1后缀。稳妥的做法是让工具报错而不是静默改名否则数据对不上时很难排查。2.3 Sheet 处理全量、增量、固定行区一个 Excel 文件通常不止一个 sheet。有的工具默认导出所有 sheet每个 sheet 生成一个 JSON 文件有的则要求你指定 sheet 名。这个差异在实际使用中影响很大。我一般推荐按「一个 sheet 一个配置主题」的原则管理表格导出的时候指定 sheet而不是全量导出。原因有两个一是避免把「说明」sheet 或「参数」sheet 一起转出去产生无效 JSON二是大文件的 sheet 全量解析会拖慢速度、吃掉内存。工具通常支持两类 Sheet 控制指定 sheet--sheet 物品表只处理目标 sheet。行区间--data-start 2表示数据从第 2 行开始--data-end 100表示只取到第 100 行。行区间参数在做「增量导出」时很有用比如线上配置只更新了前 80 行你不需要重新生成整个文件——但这种操作风险也高行号一旦错位导出结果就是错的。我更建议只在调试阶段用行区间正式环境老老实实全量导出再用 diff 工具对比差异。2.4 值类型判断字符串、数字、布尔的边界Excel 单元格本身不区分严格类型它存的是「看起来像数字的文本」和「真正的数字」。转换工具需要做类型推断这一步恰恰是坑最多的地方。常见推断逻辑如下def infer_type(raw: str, cell_format: str): if cell_format 0.00: return float(raw) if raw TRUE: return True if raw FALSE: return False try: return int(raw) except ValueError: try: return float(raw) except ValueError: return raw逻辑说明infer_type先看单元格的显示格式再看内容。加了公式或者格式的数字会被优先识别成数字类型TRUE、FALSE会被推断成布尔值剩下的依次尝试整数、浮点数都不是就按字符串保留。参数说明这里最需要关心的参数是「全数字列是否强制转字符串」。像id这列如果是001、002这种带前导零的编码Excel 实际存储的是数字1、2转换后前导零直接丢失。很多工具提供--number-as-string或「ID 列按文本处理」的选项。我的习惯是凡是作为 key 或者编码使用的列一律按字符串处理哪怕它看起来全是数字。编码不是数字是穿了数字外衣的字符串。2.5 空值策略null、省略还是空字符串空单元格如何处理是影响下游代码鲁棒性的关键决策。大多数 excel2json 工具提供三种策略输出nullJSON 里明确写出price: null完全省略该行不包含price字段输出空字符串price: 三者的语义差别很大。null表示「值不存在」省略表示「这个对象没有此属性」空字符串则把值类型锁死为字符串。给前端渲染层用空字符串最省心不会出现null导致样式组件报错给后端数值解析用null更标准能触发正常的判空逻辑但如果你拿price去做数值参与计算空字符串会在运算符里变成字符串拼接炸得无声无息。工具默认通常给null理由是语义最中立。但实际项目里我更建议按消费端反向决定先明确 JSON 给谁用再在工具里设置对应策略。不要默认值一把梭。3. 实操流程与参数设置双击界面与命令行的两个入口3.1 图形界面拖拽 → 预览 → 导出拿到这类 exe 工具第一印象往往是界面极简一个大的拖拽区域下面一排参数下拉框。操作流程通常是把 xlsx 文件拖进窗口工具读取文件并列出所有 sheet。在 sheet 标签里切换右侧实时预览转换后的 JSON 结构。选择输出格式数组/对象/列表、表头行号、空值策略。点击导出选择保存位置生成 .json 文件。预览功能是工具是否可靠的核心指标。转出来的 JSON 是否符合预期在导出之前就应该能看出来——如果工具没有预览区或者预览区不能同步反映参数的修改建议放弃它因为你是在盲转。我在帮某开发团队整理活动配置时就是靠预览区逐行核对字段名。他们有一张表叫「时间配置」列名是中文转换后 JSON key 也是中文预览区一眼就能看出起始时间这个 key 是否带空格如果带空格前端代码就得data[起始时间]才能取到值非常容易被忽视。参数调整把「列名清洗」里的「去除空格」开关打开预览区马上刷新确认无误再导出。3.2 命令行参数批量与流水线接入的门槛图形界面适合偶尔转一两次但真实工程里配置表要跟随版本迭代频繁更新手动点界面效率低。这类工具大多内置命令行模式这也是评估一个 excel2json 工具是否值得长期持有的关键。常见命令行调用方式Excel2Json.exe -i ./config/items.xlsx -o ./out/items.json --sheet 物品表 --header 1 --type map --key-col id --pretty --encoding utf8参数说明参数作用-i输入 xlsx 路径-o输出 json 路径--sheet指定导出哪个 sheet--header表头所在行号--type输出形态array 或 map--key-col当 type 为 map 时的 key 列--pretty输出带缩进的 JSON方便阅读--encoding输出编码一般选 utf8命令本身不复杂真正要注意的是参数优先级。界面上设置过的参数会不会覆盖命令行参数我用过的工具里有的界面配置会写入一个本地配置文件命令行参数优先于配置文件反之亦然。我的建议是只用一种方式传参。如果走命令行就全部参数命令行给全别依赖界面记忆如果走界面就别混着命令行调否则排查半天还不知道参数被谁覆盖了。兼容性方面命令行工具一般支持相对路径和绝对路径。相对路径在批处理脚本里方便但脚本执行目录不同容易找不到文件。我习惯在脚本开头cd /d %~dp0把工作目录切到脚本所在位置路径问题一次根治。3.3 列级映射key 改名、列过滤与手工修正转换工具解决的是「Excel 结构 → JSON 结构」的机械映射但真实表格常常需要微调。最常见的是两种诉求改 key 名称以及丢弃不需要的列。有的工具内置列过滤参数比如--columns id,name,price只导出指定列或者反过来--exclude remark,内部备注排除敏感或冗余列。没有内置列过滤的工具怎么办我一般用两步法先全量导出再对 JSON 做一次轻量处理。下面这段脚本负责剔除不需要的字段并给 key 改名import json with open(items.json, r, encodingutf-8) as f: data json.load(f) for item in data: item[item_id] item.pop(ID, item[ID]) item.pop(内部备注, None) with open(items.clean.json, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent2)逻辑说明pop(ID)取出旧字段并返回它的值赋给新字段item_idpop(内部备注, None)的第二个参数是默认值表示该字段不存在时静默跳过避免抛 KeyError。最后用ensure_asciiFalse写回文件中文直接显示而不是\uXXXX。参数说明indent2决定输出缩进方便人工 reviewencodingutf-8保证中文不乱码。这一步脚本的价值在于工具负责转换脚本负责业务规则两者职责分开改业务规则时不需要换工具。3.4 用配置文件固化规则避免每次复制参数命令行参数写多了容易出错尤其是一个项目里有多张表、每种表转换规则还不一样。成熟的工具会支持--config参数把转换规则写进一个 JSON 文件每次调用直接引用。{ input: ./config/items.xlsx, output: ./out/items.json, sheet: 物品表, header: 1, type: map, keyCol: id, numberAsString: [id, code], emptyPolicy: null }说明numberAsString指定哪些列强制按字符串处理直接解决前导零丢失问题emptyPolicy控制空单元格策略。配置文件的优势是规则可 review、可纳入版本管理。团队协作时新人不需要理解每个参数的含义照着配置文件改表就行转换规则固化在文件里不容易凭个人习惯翻车。4. 常见问题与避坑记录五个真实翻车场景4.1 中文输出成 \uXXXX 还是乱码现象导出的 JSON 用编辑器打开中文全部变成\u4e2d\u6587这种转义序列或者中文在记事本里看是正常的但程序读取出来是乱码。原因\uXXXX是 JSON 的 Unicode 转义形式很多语言的标准库默认开启比如 Python 的json.dump默认ensure_asciiTrue而乱码则通常是编码不匹配工具输出 GBK 编码程序按 UTF-8 解析或者反过来。解决转换前先确认两件事。第一工具导出的编码是不是 UTF-8尽量选 UTF-8 无 BOM第二确认工具是否提供「中文不转义」选项。如果导出的 JSON 已经变成\uXXXX用下面的命令洗一遍python -c import json,io; datajson.load(open(in.json,encodingutf-8)); open(out.json,w,encodingutf-8).write(json.dumps(data,ensure_asciiFalse,indent2))逻辑说明json.load先把转义后的文件解析成 Python 对象ensure_asciiFalse再写回时保留中文原样文件会被重写为可读的 UTF-8 JSON。4.2 日期列变成一串大数字现象Excel 里明明是2024-06-01导出的 JSON 却变成45278.0这种奇怪的浮点数。原因Excel 的日期本质是「从 1900-01-01 起算的天数序列」工具读取单元格时没有识别日期格式就把底层数值直接导出了。解决有两个处理路径。在 Excel 里把这列设置成文本格式重新录入日期工具导出时就会按字符串输出或者在工具里找日期格式参数比如--date-format yyyy-MM-dd让工具自行格式化。第一种更可靠但要求维护表格的人遵守规范第二种方便但你要确认工具对日期列的识别是真的而不是只在预览区做了格式化、导出时又变回序列数。拿到工具当天先拿一张带日期的表做个实验比到生产环境里再发现靠谱得多。4.3 合并单元格让整行数据错位现象导出后某些行的字段值整体「串位」A 列的 ID 跑到 B 列的位置上数据行数还比预期少。原因合并单元格在 Excel 里只有左上角那个格子有值其他格子是空的。转换工具按行读取时合并区域的值只在第一行出现后面的单元格是 null导致行数据错位。更麻烦的是有些工具遇到合并单元格会跳过整行行数直接少。解决转换之前先处理 Excel取消合并并填充。操作路径是选中合并区域 → 取消合并 → 按 CtrlG 定位空值 → 输入并引用上方单元格 → 按 CtrlEnter 批量填充。处理完再用工具转换就不会出现空档。这个步骤应该在表格规范里写明而不是每次转换时手动补因为人总会忘。4.4 公式列导出成空值现象Excel 里这列是B2*C2计算出来的价格导出后 JSON 里却是 null 或 0。原因工具不做公式计算它只读取存储值。如果表格从未用 Excel 或 WPS 打开保存过计算结果的缓存可能不存在工具读到的就是空值。解决最省事的方法是在 Excel 里选中公式区域复制右键「选择性粘贴」→「粘贴为值」把公式替换成静态数值后再转。第二种是直接查一下工具手册有没有「重算公式」选项部分打包工具内置了公式引擎但体积会大不少加载也慢。我的建议是配置表里避免放公式公式是 Excel 的活不该让转换工具来背。4.5 空值策略选错导致下游崩溃现象JSON 导出成功前端渲染时price字段是 null组件直接报错或者后端拿到空字符串做数值比较时类型错误。原因空值策略只考虑了「工具能转出来」没考虑「消费端能不能接住」。把 null、空字符串、省略三种策略混用下游处理逻辑就会四分五裂。解决确定消费端是哪个语言、哪种框架把策略固化下来。渲染层用省略或空字符串数据层用 null 更规范配置文件类型的地方最好用空字符串并配合默认值。还有一招在 JSON Schema 层面做校验把必填字段、字段类型写清楚转换后自动校验空值策略错了当场就能发现而不是等上线。4.6 大文件导出慢、内存暴涨现象一个 5 万行的 xlsx图形界面转了几分钟没动静内存占用飙到 2GB最后直接卡死。原因工具按 DOM 方式全量加载整个工作簿行数上来之后内存消耗线性增长预览区还要实时渲染 JSON雪上加霜。解决控制输入规模。分 sheet 转换一次只处理一个配置主题关闭预览再转换减少渲染开销。真遇到几十万行的超大数据就别指望这种轻量 exe 工具了换流式读取的方案更靠谱。工具适合常规配置表的量级这是它的边界不算缺陷。5. 结果验证与批量进阶先验结构再让它进流水线5.1 一分钟结构自检导出完成后不要直接扔给下游先跑一遍 JSON 合法性校验。最简单的命令python -c import json; json.load(open(out.json, encodingutf-8)); print(JSON 合法)逻辑说明json.load会把整个文件解析成 Python 对象解析失败会抛出异常成功则打印提示。这一步能挡住九成低级错误——少个括号、多一个逗号、编码损坏全都会在这里现出原形。如果你在 Node 环境用node -e JSON.parse(require(fs).readFileSync(out.json,utf8))效果相同。5.2 用 bat 脚本批量转换整个目录配置表往往不止一张目录下十几个 xlsx 逐个拖拽太累。把命令行参数封装成一个脚本echo off cd /d %~dp0 for %%f in (.\xlsx\*.xlsx) do ( echo 转换 %%f Excel2Json.exe -i %%f -o .\json\%%~nf.json --pretty )参数说明for %%f in遍历xlsx目录下所有 xlsx 文件%%~nf取出不带扩展名的文件名作为输出 JSON 的文件名。cd /d %~dp0把工作目录切到脚本所在目录配合相对路径.\xlsx使用避免路径错位。批量转完不是终点。把生成的 JSON 提交到版本库每次表格更新后重新生成用git diff查看变动你会发现所有字段改动都是透明的可 review、可回溯比 Excel 文件本身更适合作为配置发布的中间产物。有一次我没做结构校验直接把转换结果发给团队成员结果日期列全是序列数排查了两小时才定位到是那个列被改成了文本格式。从那以后我每次批量转换完强制走一遍结构校验再提交这个习惯再也没让我在配置转换上翻过车。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑