资讯动态

VBA解析JSON终极实战:5分钟让Excel和Access告别手工拆字符串

发布时间:2026/8/20 5:33:05 来源:尧图企业网站定制
VBA解析JSON终极实战5分钟让Excel和Access告别手工拆字符串【免费下载链接】VBA-JSONJSON conversion and parsing for VBA项目地址: https://gitcode.com/gh_mirrors/vb/VBA-JSON凌晨一点你还在Excel里跟接口返回的一长串文本搏斗。订单号、客户名、金额全挤在花括号和逗号之间你只能靠Mid、InStr、Split一个字段一个字段地往外抠索引稍微挪一位就得重新调试。VBA-JSON这个开源库就是冲着VBA解析JSON数据这个老大难来的——一行ParseJson把JSON文本变成随手可读写的对象Excel、Access、Word全都能用。这个坑为什么一踩就是好几年先别急着骂自己这真不是你的问题。VBA这个三十多岁的老伙计天生没有JSON这个数据类型摆在开发者面前的三条老路各有各的坑手工拆分。用InStr找冒号、用Mid截片段。JSON一变结构、多一层嵌套你写好的那段祖传代码立刻原地报废改起来比重新写还慢。正则硬啃。VBA里的正则支持有限遇到嵌套对象和转义字符就是一场噩梦写出来的表达式自己都看不懂。调用第三方控件。装个ActiveX组件确实能解析但部署时要跟着分发DLL、还得操心注册表客户电脑上稍微有点权限问题就全线罢工。所以解析JSON这件在现代编程语言里一个函数搞定的事在VBA世界里硬生生变成了手工活。痛点不在有没有工具而在没有一个轻量、免安装、开箱即用的方案。转折VBA-JSON给出的新答案VBA-JSON的做法简单得近乎粗暴整个库只有一个JsonConverter.bas文件导入即用零依赖部署。它把JSON对象解析成VBA原生的字典Dictionary和集合Collection反过来也能把字典和集合重新拼成JSON文本。对比维度传统做法使用 VBA-JSON 后解析一段JSON手写Mid/InStr/Split组合一改格式就崩一行ParseJson自动变成字典和集合生成JSON文本手工拼字符串引号转义出错率极高一行ConvertToJson转义全自动处理输出排版只能一条长字符串肉眼难查错传个Whitespace参数即可缩进美化跨平台Windows一套代码、Mac再写一套一个文件双平台通用条件编译自动切换大数字/日期15位截断、时区换算全靠自己算内置开关和ISO时间函数直接搞定4个能直接帮你省时间的核心能力双向转换一个函数读进来一个函数写出去这是最解气的一点。解析用ParseJson序列化用ConvertToJson一进一出就把JSON的读写闭环了。拿到手的对象跟普通字典一样操作改完再转回去改动自动生效Sub 双向转换演示() 模拟接口返回的JSON文本 Dim rawJson As String rawJson {title:季度复盘,pages:12,tags:[报表,总结]} 解析成可读写的对象 Dim doc As Object Set doc JsonConverter.ParseJson(rawJson) Debug.Print doc(title) 输出: 季度复盘 Debug.Print doc(tags)(1) 输出: 报表集合从1开始编号 doc(pages) 15 直接修改值 改完再转回JSON字符串 Debug.Print JsonConverter.ConvertToJson(doc) End Sub跨平台同一个文件在Mac和Windows上都能跑JsonConverter.bas内部用#If Mac Then这类条件编译指令做了平台分流Windows调用系统API处理时区Mac走另一套实现。你只管写业务代码平台差异全被挡在模块内部——同一个文件两个平台都能跑这是很多同类库做不到的。15位数字陷阱大整数不再被悄悄截断VBA的浮点数只有15位有效数字银行卡号、订单流水号、雪花ID这种超长数字一旦被当成数值处理就变成1.2345E18这种不可逆的残废数据。VBA-JSON的默认策略是纯数字且超过15位的值按字符串原样保存保证不丢位。如果你确实需要数值也有开关可以切换后面避坑章节细说。日期与时区ISO 8601时间字符串一键转本地时间接口返回的2026-08-19T08:30:00Z这类时间戳在VBA里手动解析要处理时区偏移、UTC换算一堆破事。VBA-JSON内置ParseIso、ConvertToIso、ParseUtc、ConvertToUtc四个函数把ISO字符串和本地时间之间的换算打包好了Dim localTime As Date localTime JsonConverter.ParseIso(2026-08-19T08:30:00Z) Debug.Print Format(localTime, yyyy-mm-dd hh:nn) 自动转成你的本地时间从零到能跑的完整安装与首个Demo整个过程四步熟练之后一分钟都用不了拉取源码打开命令行执行下面的命令把仓库克隆到本地导入模块在Excel/Access里按AltF11打开VBA编辑器菜单文件→导入文件选中JsonConverter.bas配置字典库Windows用户点工具→引用勾选Microsoft Scripting RuntimeMac用户需要导入VBA-Dictionary项目里的Dictionary.cls运行Demo把下面的代码贴进标准模块按F5执行然后打开立即窗口看结果git clone https://gitcode.com/gh_mirrors/vb/VBA-JSONSub 我的首个JSONDemo() 一段最简单的JSON一个标题、一个数字、一个数组 Dim sample As String sample {title:第一次跑通,count:3,list:[10,20,30]} 解析 取值 重新序列化一条龙 Dim data As Object Set data JsonConverter.ParseJson(sample) Debug.Print data(title) 第一次跑通 Debug.Print data(list)(2) 20 带2格缩进的漂亮输出 Debug.Print JsonConverter.ConvertToJson(data, Whitespace:2) End Sub你会得到什么立即窗口里依次出现第一次跑通、20以及一份排版整齐的多行JSON。到这一步VBA-JSON已经装好并跑通了接下来直接抄场景代码即可。3个真实工作场景抄完就能用场景一把接口返回的订单数据写进Excel表格假设你的ERP系统返回了一批订单你想快速落进工作表做后续统计Sub 订单数据写入Excel() 实际项目中这段文本来自HTTP请求这里用字符串模拟 Dim apiText As String apiText {orders:[{id:1001,name:张三,total:199.5}, _ {id:1002,name:李四,total:88}] Dim payload As Object Set payload JsonConverter.ParseJson(apiText) 逐行写入当前工作表 Dim rowNo As Long rowNo 1 Dim order As Object For Each order In payload(orders) Cells(rowNo, 1).Value order(id) Cells(rowNo, 2).Value order(name) Cells(rowNo, 3).Value order(total) rowNo rowNo 1 Next order MsgBox 共写入 payload(orders).Count 条订单 End Sub运行后你会看到弹窗提示共写入 2 条订单工作表A1到C2两行三列填满了数据。以后接口结构只要字段名不变这段代码可以一直复用。场景二Access读取JSON配置文件把数据库的连接参数、界面开关、审批规则放进一个config.json代码里统一读取Function 加载配置(路径 As String) As Object 用文件系统对象读出文本文件 Dim fso As Object Set fso CreateObject(Scripting.FileSystemObject) Dim stream As Object Set stream fso.OpenTextFile(路径, 1, False) Dim content As String content stream.ReadAll stream.Close 解析成字典调用方按键名取配置 Set 加载配置 JsonConverter.ParseJson(content) End Function运行后你会看到这个函数返回一个字典加载配置(dbHost)、加载配置(timeout)到处可读。改配置只动JSON文件不用再进VBA编辑器翻代码业务同事也能自己维护。场景三把Excel内容导出成Web系统能认的JSON反过来把报表内容打包成JSON交给前端或下游系统Sub 导出配置为JSON() 用字典装下所有要导出的内容 Dim exportBag As Object Set exportBag CreateObject(Scripting.Dictionary) exportBag.Add reportName, ActiveSheet.Name exportBag.Add generatedAt, Now() exportBag.Add regionList, Array(华东, 华南, 华北) 生成带缩进的JSON文本 Dim outText As String outText JsonConverter.ConvertToJson(exportBag, Whitespace:2) 预览到单元格同时打印到立即窗口 Range(E1).Value outText Debug.Print outText End Sub运行后你会看到E1单元格出现一段结构化JSON日期字段自动按ISO格式序列化数组被正确拼成[...]。把outText交给接口或写入文件就是一份标准合规的JSON数据。VBA解析JSON最常见的3个报错怎么修报错一编译时提示用户定义类型未定义现象导入JsonConverter.bas后一编译就报错代码行标黄。原因Dictionary这个类型来自Microsoft Scripting Runtime库你没勾引用编译器根本不知道它长什么样。解法Windows下工具→引用勾选Microsoft Scripting RuntimeMac下改为导入VBA-Dictionary项目中的Dictionary.cls。勾完重新编译即可。报错二长数字变科学计数法现象19位银行卡号取出来成了1.23456789012345E18。原因VBA数值只有15位有效数字超出的部分被浮点表示吞掉了。⚠️ 这是不可逆的丢失转回字符串也补不回来。解法别改数据直接用VBA-JSON的默认行为——超长纯数字按字符串保存。只有当你确认我就是要数值才手动打开开关JsonConverter.JsonOptions.UseDoubleForLargeNumbers True。报错三取数组第一个元素报下标越界现象明明JSON里写着[a,b]你写data(list)(0)却报错改成(1)就好了。原因ParseJson解析数组时生成的是VBA的Collection而Collection的下标从1开始不是VBA数组的0。解法把数组元素当成集合访问从(1)起步。想确认类型可以用TypeName(data(list))看一眼输出Collection就按这个规则取值。进阶搭配VBA-JSON还能和谁组合出更大能力VBA-Dictionary这是Mac平台跑VBA-JSON的必备拼图它用纯VBA实现字典让没有Scripting Runtime的Mac也能正常解析。Windows用户想彻底摆脱库引用依赖也可以换用它。VBA-Web如果说VBA-JSON负责解析JSONVBA-Web就负责发出请求。两者搭配你就能在VBA里完成完整的API调用闭环WebClient发请求拿到响应文本ParseJson立刻转成字典操作。另外JsonOptions里还有两个实用开关值得一试AllowUnquotedKeys允许键名不带引号对付某些偷懒接口EscapeSolidus控制斜杠是否转义。决策指南你该不该引入VBA-JSON适合马上用的人可以再等等的人需要对接Web API的Excel/Access开发者纯本机运算、永不接触外部数据跨Windows/Mac部署Office解决方案的团队项目里完全禁止新增任何外部引用天天被字符串拼接折磨的报表自动化维护者JSON结构固定且只嵌套一层手写也能忍想把配置外置给非技术同事维护的人数据量极小解析性能不构成瓶颈如果你在左边那一栏哪怕中了一条都值得现在花五分钟把它接进来——一个文件的成本换掉的是今后无数个深夜的字符串苦战。现在你只差三步拉代码命令行执行git clone https://gitcode.com/gh_mirrors/vb/VBA-JSON导文件VBA编辑器里导入JsonConverter.bas勾好字典库引用跑Demo粘贴上面那段演示代码按下F5亲眼看到JSON在VBA手里服服帖帖从今晚开始别再跟花括号死磕了。让VBA-JSON接管JSON解析这件事你的下一个报表、下一份配置、下一个接口对接都能准时下班。【免费下载链接】VBA-JSONJSON conversion and parsing for VBA项目地址: https://gitcode.com/gh_mirrors/vb/VBA-JSON创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

免费获取报价