04
2015
08

as3读取excel

用as3读取excel数据,用到一个类库。as3可以读取二进制,所以无论是excel还是其它格式,理论上来说都可以读取。只是大多数情况下,都是找别人写好的类库来用,而不是自己写一个,主要是自己水平不够。

package  
{
	import com.adobe.serialization.json.JSON;
	import com.as3xls.xls.ExcelFile;
	import com.as3xls.xls.Sheet;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.net.FileReference;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.utils.ByteArray;
	
	/**
	 * ...
	 * @author hanyeah
	 */
	public class Main extends MovieClip 
	{
		
		private var _xls:ExcelFile;  
		private var _file:FileReference;
		private var _uld:URLLoader;
		public function Main() 
		{
			trace("main");
			stage?initStage(null):addEventListener(Event.ADDED_TO_STAGE, initStage);
		}
		
		private function initStage(e:Event):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, initStage);
			_uld = new URLLoader();
			_uld.dataFormat = URLLoaderDataFormat.BINARY;
			_uld.load(new URLRequest("步骤.xls"));
			_uld.addEventListener(Event.COMPLETE, onComplete);
		}
		
		private function onComplete(e:Event):void 
		{
			trace("complete");
			var byteArray:ByteArray = e.currentTarget.data as ByteArray;
			byteArray.position = 0;
			_xls = new ExcelFile(); 
			_xls.loadFromByteArray(byteArray);
			var sheet:Sheet = _xls.sheets[0];
			var arr:Array = [];
			var obj:Object = { };
			var pageId:String = "";
			for(var i:int = 2;i < sheet.values.length - 1; i++)                          
			{
				
				obj = { };
				arr.push(obj);
				obj["pageId"] = sheet.values[i][0].value;
				obj["stepId"] = sheet.values[i][1].value ;
				obj["type"] = sheet.values[i][2].value ;
				obj["flag"] = sheet.values[i][3].value ;
				
				
				for (var j:int = 0; j < 3; j++ ) {
					var obj2:Object = { };
					obj["mode"] = obj2;					
					obj2["redo"] = sheet.values[i][4 + j * 8].value;
					obj2["relyStep"] = sheet.values[i][5 + j * 8].value;
					obj2["relyTools"] = sheet.values[i][6 + j * 8].value;
					obj2["useTools"] = sheet.values[i][7 + j * 8].value;
					obj2["effectStep"] = sheet.values[i][8 + j * 8].value;
					obj2["hint1"] = sheet.values[i][9 + j * 8].value;
					obj2["hint2"] = sheet.values[i][10 + j * 8].value;
					obj2["other"] = sheet.values[i][11 + j * 8].value;
				}
			}
			var s:String = com.adobe.serialization.json.JSON.encode(arr);
			//trace(s);
			tf.text = s;
		}
		
	}

}

需要在库路径里添加as3xls-1.0.1.swc,只写了一个读取excel的demo,其它功能没仔细研究,而且,这个类智能读取excel97-2003的文件,不支持excel2007。需要的话,可以找一个支持2007的类库。

首先以二进制方式读取文件,然后新建一个ExcelFile对象,调用ExcelFile对象的loadFromByteArray方法,传入刚才的二进制文件。

_xls = new ExcelFile(); 

_xls.loadFromByteArray(byteArray);

var sheet:Sheet = _xls.sheets[0];来去读第几个表。excel文件其实是一个工作簿,里边会有好多excel表(默认是3个,可以添加删除,自定义)。sheet.values是一个二维数组,对应excel表里边的表格,通过这个二维数组来读取第几行第几列的数据。

策划人员经常会用到excel表,我们可以做个工具读取表格中的内容,然后保存成自己需要的格式,可能回升好多时间。当然,也可以用VBA来在excel里边写一个宏,导出成需要的格式,这里不做讨论。


源码打包下载

« 上一篇下一篇 »

相关文章:

闪电效果  (2017-11-28 15:4:19)

线段与椭圆的交点  (2017-1-6 14:43:41)

as3录制swf并保存flv视频  (2016-12-28 8:43:41)

解九连环  (2016-12-1 20:58:11)

as3实现setTimeout和trace  (2016-11-10 16:47:37)

registerCursor注册系统光标  (2016-9-14 9:49:40)

鼠标光标管理  (2016-9-13 17:44:3)

变形框(transform)实现  (2016-9-13 16:56:6)

flash文本消除锯齿不显示  (2016-8-25 11:43:31)

greenSock的easing曲线  (2016-8-24 18:30:11)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。