
VBA处理JSON终极指南一个文件让Excel和Access轻松读懂Web数据【免费下载链接】VBA-JSONJSON conversion and parsing for VBA项目地址: https://gitcode.com/gh_mirrors/vb/VBA-JSON上周一位做运营的朋友跟我吐槽从公司后台导出的JSON格式报表在Excel里打开全是乱码她手动复制粘贴整理了整整一个下午。其实让Excel读懂JSON并不难——借助开源库VBA-JSONVBA处理JSON这件事可以从地狱模式切换成快乐模式。这个轻量级库专门解决Office开发者的JSON解析难题用一句话概括就是导入一个文件你的Excel、Access、Word、Outlook就都学会了说JSON这门语言。一段让打工人破防的经历先讲个真实场景看看你是否也中过招。小李在一家电商公司做运营每天要从物流平台导出包裹轨迹数据。平台提供的是标准的JSON接口格式长这样{快递单号:SF1234567890,状态:运输中,轨迹:[{时间:2026-08-19 07:00,地点:上海派送点}]}数据本身没什么问题问题在于公司的业务系统是ExcelVBA开发的而VBA天生不认识JSON。小李只能把数据复制到在线格式化工具里再手动逐行粘贴到表格几十个包裹就要折腾两三个小时还经常抄错字段。他当时的处理方式是写了一段土办法代码——用InStr和Mid硬生生地从字符串里抠数据Dim 起点 As Long 起点 InStr(原始文本, 地点:) 6 Dim 终点 As Long 终点 InStr(起点, 原始文本, ) 地点 Mid(原始文本, 起点, 终点 - 起点)这种写法有一个致命伤JSON字段顺序一变、嵌套层级一深、内容里出现特殊字符代码立刻崩溃。修了东墙倒西墙越补越绝望。问题解剖为什么JSON对VBA这么不友好在动手解决之前我们先弄清楚麻烦到底出在哪。VBA没有原生JSON解析器。不像Python有json模块、JavaScript有JSON.parseVBA连个像样的字典类型都得靠外部引用更别提解析JSON了。JSON是嵌套结构而VBA习惯扁平思维。JSON里对象套数组、数组套对象是常态用字符串函数去抠数据等于用螺丝刀撬保险箱。特殊字符和转义规则防不胜防。引号、反斜杠、换行符混在一起稍不留神就解析错位错误还特别难排查。数字精度有隐形陷阱。VBA的Double只有15位有效数字快递单号、身份证号动辄18位以上稍不注意就变成科学计数法丢尾数是常事。这些坑叠加在一起导致很多人在VBA里处理JSON时要么写出一堆面条代码要么干脆放弃自动化退回纯手工操作。认识主角VBA-JSON到底是个什么来头好消息是这些问题早就有人替你趟平了。VBA-JSON是VBA生态里广受欢迎的开源项目由VBA-tools社区的开发者Tim Hall维护最初脱胎于vba-json项目后来经过大量bug修复和性能优化成为VBA-Web全家桶的基石组件。它的目标非常纯粹JSON conversion and parsing for VBA——为VBA提供完整的JSON解析与生成能力。而且它不是Windows专宠在Windows和Mac的Excel、Access以及其他Office应用里都能跑官方在Windows Excel 2013和Excel for Mac 2011上做过验证理论上2007版本都适用。整个项目的核心就一个文件JsonConverter.bas。为什么它能打动你四个一看就懂的理由单文件即插即用️ 不需要安装插件、不需要配置环境变量把JsonConverter.bas导入VBA工程就算集成完毕零学习曲线。解析与生成双向打通 既能用ParseJson把JSON文本变成VBA对象也能用ConvertToJson把字典、数组反向输出成JSON一条龙。Windows和Mac通吃 源码里用#If Mac Then条件编译自动适配不同平台你在Windows上写的代码拷贝到Mac上通常不用改。细节设计很贴心⚙️ 内置大数字保护、非标准JSON宽容解析、ISO日期与UTC时间转换等实用选项专治各种疑难杂症。动手实操十分钟跑通第一个JSON解析理论讲再多不如跑一段代码。我们一步步来。第一步把核心文件请进你的项目先拿到源码在命令行执行git clone https://gitcode.com/gh_mirrors/vb/VBA-JSON然后打开Excel或Access按Alt F11进入VBA编辑器在左侧工程资源管理器里右键你的项目选择导入文件找到并选中JsonConverter.bas。第二步补上字典库引用VBA-JSON内部依赖字典这个数据结构需要按系统补个配置你的系统需要做的配置WindowsVBA编辑器 → 工具 → 引用 → 勾选Microsoft Scripting RuntimeMac引入VBA-Dictionary项目里的Dictionary.cls类文件 小提示这一步没做好编译时会报用户定义类型未定义后面避坑指南里会细说。第三步写一段能跑的解析代码我们沿用开头快递的场景把那段手工抠字符串的代码换成VBA-JSONSub 快递轨迹导入() 模拟物流接口返回的 JSON 原文 Dim 接口文本 As String 接口文本 {快递单号:SF1234567890,状态:运输中, _ 轨迹:[{时间:2026-08-18 09:12,地点:杭州转运中心}, _ {时间:2026-08-19 07:00,地点:上海派送点}]} 一行代码完成解析返回字典对象 Dim 快递信息 As Object Set 快递信息 JsonConverter.ParseJson(接口文本) 像查字典一样取顶层字段 Debug.Print 单号 快递信息(快递单号) Debug.Print 当前状态 快递信息(状态) 轨迹是个数组遍历写入工作表 Dim 轨迹节点 As Object Dim 行号 As Long 行号 2 For Each 轨迹节点 In 快递信息(轨迹) Cells(行号, 1).Value 轨迹节点(时间) Cells(行号, 2).Value 轨迹节点(地点) 行号 行号 1 Next 轨迹节点 End Sub跑完之后Debug.Print的即时窗口里会出现单号和状态A2、B2单元格则被写入了2026-08-18 09:12 / 杭州转运中心这样的轨迹数据。这段代码最妙的地方在于无论JSON怎么嵌套快递信息(轨迹)里的每一层都像原生对象一样可读可遍历再也不用关心字段之间夹了几个引号了。三个真实场景帮你把技能用起来学会了基础解析我们来看几个更贴近日常的用法。场景一Access 批量读取配置文件很多Access应用把参数存在外部JSON文件里方便非技术人员修改。用VBA-JSON读取非常省心Function 读入配置() As Object 用文件系统对象读取 config.json 全文 Dim 文件服务 As Object Set 文件服务 CreateObject(Scripting.FileSystemObject) Dim 文本流 As Object Set 文本流 文件服务.OpenTextFile(CurrentProject.Path \config.json, 1) Dim 全部文本 As String 全部文本 文本流.ReadAll 文本流.Close 解析后直接返回字典调用方按 key 取用即可 Set 读入配置 JsonConverter.ParseJson(全部文本) End Function以后运维改配置只需要编辑那个JSON文件程序下次启动自动生效完全不碰代码。场景二把 Excel 表格反向导出成 JSON很多时候我们不是收数据而是交数据——比如把考勤名单整理好交给上游系统。ConvertToJson就是干这个的Sub 考勤数据导出() 用字典拼装要导出的结构 Dim 导出包 As Object Set 导出包 CreateObject(Scripting.Dictionary) 导出包.Add 部门, 市场部 导出包.Add 统计日期, Format(Now(), yyyy-mm-dd) 导出包.Add 人员, Array(李明, 王芳, 陈晨) 紧凑模式机器读体积小 Dim 紧凑串 As String 紧凑串 JsonConverter.ConvertToJson(导出包) 美化模式人读带缩进 Dim 美观串 As String 美观串 JsonConverter.ConvertToJson(导出包, Whitespace:2) Debug.Print 美观串 End SubWhitespace参数是个很贴心的小设计传数字就是空格缩进传vbTab还能用Tab缩进输出效果一目了然。场景三处理带时区的日期时间Web接口返回的时间经常是ISO 8601格式比如2026-08-19T07:36:00Z。VBA-JSON贴心地内置了时间转换工具Sub 时间格式转换() ISO 字符串 → 本地时间 Dim 世界时间 As String 世界时间 2026-08-19T07:36:00Z Dim 本地时刻 As Date 本地时刻 JsonConverter.ParseIso(世界时间) Debug.Print 换算成北京时间 本地时刻 本地时间 → ISO 字符串 Debug.Print JsonConverter.ConvertToIso(Now()) End SubParseUtc、ConvertToUtc则专门处理UTC时区换算跨地区协作的数据对账再也不怕时间对不上。让代码更省心的三个进阶技巧技巧一为超长数字开启保护模式。快递单号、订单号一旦超过15位VBA的Double就会精度失真。VBA-JSON的默认行为是纯数字超过15位时按字符串保存从源头避免丢位数。只有当你确实需要把它们当数字做运算时才手动打开JsonConverter.JsonOptions.UseDoubleForLargeNumbers True——多数情况下保持默认就是最安全的。技巧二解析一次缓存复用。如果在循环里反复ParseJson同一段文本纯属浪费。正确姿势是循环外解析一次循环内只读取结果对象遇到几百KB的超大JSON还可以按批次切片处理配合DoEvents让界面保持响应。技巧三给解析套上保险丝。生产环境里接口返回的JSON未必永远规范用On Error Resume Next接住10001解析错误失败时记录日志、返回空字典继续跑比让整个宏当场崩溃体面得多。别踩这些坑高频问题与解药你遇到的症状背后的原因解药编译报用户定义类型未定义缺少字典库Windows勾选 Microsoft Scripting RuntimeMac导入 Dictionary.cls大数字变科学计数法、尾数丢失Double只有15位有效数字保持默认的字符串策略别轻易开启 UseDoubleForLargeNumbers运行时报 10001 解析错误JSON文本非法或引号未正确转义VBA字符串里写表示一个引号先粘贴到JSON校验工具里检查原文明明字段存在却取不到值key拼写或大小写不一致用Exists方法先判断key是否存在再取值Mac上结果和Windows不一样平台API差异确认用的是新版 JsonConverter.bas其内置条件编译已覆盖Mac同场加映它和其他方案差在哪选工具之前先看看市面上还有哪些路可以走方案对比上手成本跨平台功能完整度适合谁VBA-JSON低一个文件导入即用Windows Mac解析、生成、日期、选项一应俱全绝大多数Office场景闭眼选手写字符串切割/正则高且极易出错看个人实现极低几乎不可维护只适合一次性、极简单的临时需求外部脚本Python/Node中转中需要额外运行环境依赖外部环境高但脱离Office体系数据量巨大、可离线批处理的场景完整框架如VBA-Web全家桶中组件较多以Windows为主含HTTP客户端等更多能力需要完整API调用链的重量级项目结论很明确如果你只想解决VBA里读写JSON这一个问题VBA-JSON是性价比最高的选择——它不会逼你引入一整套框架但把JSON这件事做到了位。三步行动清单现在就开始看到这里工具就绪、场景清晰、坑也排过了剩下的就是动手。给你一份极简行动清单拉代码git clone https://gitcode.com/gh_mirrors/vb/VBA-JSON把JsonConverter.bas导入你的VBA工程配引用Windows勾选 Microsoft Scripting RuntimeMac引入 Dictionary.cls跑示例把本文的快递解析代码粘进模块里运行看到即时窗口输出结果的那一刻你就正式入门了。从此以后那些从API、配置文件、其他系统里涌来的JSON数据在你的Excel和Access面前将不再是天书。告别手工复制粘贴告别越修越乱的字符串代码——VBA处理JSON的最后一公里一个文件就能打通。去试试吧你会发现原来Office和现代Web数据之间只差一次漂亮的握手。延伸阅读想深入钻研的话这几个文件值得反复翻阅核心实现全部解析与生成逻辑JsonConverter.bas官方入门文档与示例代码README.md自动化测试用例可参考其编写自己的测试specs/Specs.bas【免费下载链接】VBA-JSONJSON conversion and parsing for VBA项目地址: https://gitcode.com/gh_mirrors/vb/VBA-JSON创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考