使用AS3将xls转成Json

来源:互联网 发布:win10无法连接到此网络 编辑:程序博客网 时间:2024/04/30 00:46

背景介绍:

早在2008年,AS3就已经有了三方类库as3xls封装了json / xml和xls之间的格式转换功能,但对中文支持较差(本人估计对所有双字节的和多字节的语种都支持不了)。多年以来这个类库并未随着office软件一起升级,现在几乎到了无法使用的地步。再次引用as圈中一个老鬼的话:现在的江湖已不再是我记忆中的江湖了...


给大家分享下我的方法吧:

1. 将xls保存为xml格式,如下图(一定要选2003格式哦)

2. 使用FileReference将保存的xml文件以二进制的格式读入到程序中并取出字符串

3. 用正则把这个xml字符串中的命名空间去掉

4.再把xml转换成Object

5.本地化存储Json文件


详见代码

package{import flash.display.Sprite;import flash.events.Event;import flash.events.MouseEvent;import flash.net.FileFilter;import flash.net.FileReference;import flash.net.URLLoader;import flash.utils.ByteArray;public class Tools003 extends Sprite{private var _file:FileReference;public function Tools003(){_file = new FileReference();_file.addEventListener(Event.SELECT, onSelect);_file.addEventListener(Event.COMPLETE, onComplete);stage.addEventListener(MouseEvent.CLICK , onClick)new Test()}//Step1 选择文件并读取成字符串private function onClick($e:MouseEvent):void{var filter:FileFilter = new FileFilter("file" , "*.xml")_file.browse([filter]);}private function onSelect($e:Event):void{_file.load();}private function onComplete(e:Event):void{var byteArray:ByteArray = new ByteArray();byteArray = _file.data as ByteArray;byteArray.position = 0;var str:String = byteArray.readMultiByte(byteArray.length , "utf-8");trans2Json(str);}//Step2 整理xml字符串为jsonprivate function trans2Json($str:String):void{$str = removeXMLNameSpace($str);//移除xml中的命名空间var xml:XML = XML($str);var obj:Object = xml2Object(xml);}private function removeXMLNameSpace($str:String):String{var a:Array = findXMLNameSpace($str);//去除空间声明var r:RegExp = /xmlns[^"]+"[^"]+"/g;$str = $str.replace(r , "");//去除空间名使用for (var i:int = 0; i < a.length; i++){var s:String = a[i] + ":"r = new RegExp(s , "g");$str = $str.replace(r , "");}return $str;}private function findXMLNameSpace($str:String):Array{var arr:Array = new Array();var r:RegExp = /xmlns[^"]+"[^"]+"/g;var a:Array = $str.match(r);r = /xmlns:[^=]+=/g;for each (var s:String in a){var a1:Array = s.match(r);if(a1 && a1.length){s = a1[0];s = s.replace("xmlns:" ,"")s = s.replace("=","");arr.push(s);}}return arr;}private function xml2Object(xml:XML):Object{var obj = new Object();var ls:XMLList = xml.children();var atts:XMLList = xml.attributes();for each (var att:XML  in atts){obj[att.name().toString()]= att.toString();}if(ls.length() > 0){for each(var node:XML in ls){var objsub:Object = xml2Object(node);var tmp:Object = obj[node.name()];if(tmp==null){obj[node.name()]=objsub;}else if(tmp is Array){(tmp as Array).push(objsub);}else{obj[node.name()]=new Array(tmp,objsub);}}}return obj;}//Step3 存储json文件private function save($o:Object):void{var byteArray:ByteArray = new ByteArray();byteArray = _file.data as ByteArray;byteArray.position = 0;var str:String = byteArray.readMultiByte(byteArray.length , "utf-8");trans2Json(str);}}}



0 0