VBA将excel数据表生成JSON文件
ADODB.Stream创建UTF-8+BOM编码的文本文件。
然后遍历数据区,格式化数据,输出即可。
小数据还行,大数据没测试。
另,使用fso创建的文本文件编码为ANSI,ajax解析json时出现乱码无法正常解析。
SubToJson()'创建UTF8文本文件 myrange=Worksheets("sheet1").UsedRange'通过有效数据区来选择数据 'myrange=ActiveWorkbook.Names("schoolinfo").RefersToRange'通过定义的名称来选择数据 'myrange=Range(Worksheets("sheet1").Range("a1").End(xlDown),Worksheets("sheet1").Range("a1").End(xlToRight))'通过标题行的最大行最大列来选择数据 Total=UBound(myrange,1)'获取行数 Fields=UBound(myrange,2)'获取列数 DimobjStreamAsObject SetobjStream=CreateObject("ADODB.Stream") WithobjStream .Type=2 .Charset="UTF-8" .Open .WriteText"{""total"":"&Total&",""contents"":[" Fori=2ToTotal .WriteText"{" Forj=1ToFields .WriteText""""&myrange(1,j)&""":"""&Replace(myrange(i,j),"""","\""")&"""" Ifj<>FieldsThen .WriteText"," EndIf Next Ifi=TotalThen .WriteText"}" Else .WriteText"}," EndIf Next .WriteText"]}" .SaveToFileActiveWorkbook.FullName&".json",2 EndWith SetobjStream=Nothing EndSub
最近在写一网站网页,需要从后台ASP网页查询到的MYSQL记录集返回给前台ASP网页,我们知道AJAX是无力从后台返回数据库记录集给前台网页的.
查阅大量资料,就目前而言记录集转换成JSON格式流,再由前台VBA导入WEBoffice控件的excel是个不错的选择.经过些思考,现将function过程代码奉献给大家.
FunctionGetJSON(Rs) DimJSON dimreturnStr dimi dimoneRecord ifRs.eof=falseandRs.Bof=falsethen returnStr="{"&chr(34)&"records"&chr(34)&":[" whileRs.eof=false fori=0toRs.Fields.Count-1 oneRecord=oneRecord&chr(34)&Rs.Fields(i).Name&chr(34)&":" oneRecord=oneRecord&chr(34)&Rs.Fields(i).Value&chr(34)&"," Next oneRecord=left(oneRecord,InStrRev(oneRecord,",")-1) oneRecord=oneRecord&"}," returnStr=returnStr&oneRecord Rs.MoveNext Wend returnStr=left(returnStr,InStrRev(returnStr,",")-1) returnStr=returnStr&"]}" endif GetJSON=returnStr EndFunction