Flex利用as3xls导入excel数据表

看了sungang_1120的http://sungang-1120.iteye.com/blog/1944358帖子,做了一下改进,步骤如下:

1.生成excel文件,保存为97-2003版xls文件,内容如下图所示,这样能保证导入不出错,并解决了中文在95版xls中的中文乱码问题:



 2. 找到as3xls库,请下载附件改进版的as3xlsUTF8.swc库,google上提供的库在 http://code.google.com/p/as3xls/ down的 as3xls.swc打开97-2003的xls会出错,出现EOF错误,情况如下所示:



 3.在flex建立工程,敲入如下代码:

<?xml version="1.0" encoding="utf-8"?>  
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"   
			   xmlns:s="library://ns.adobe.com/flex/spark"   
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">  
	
	<fx:Script>  
		<![CDATA[  
			import com.as3xls.xls.ExcelFile;  
			import com.as3xls.xls.Sheet;  
			
			import mx.collections.ArrayCollection;  
			import mx.controls.Alert;  
			
			
			private var xls : ExcelFile;  
			private var sheet : Sheet;  
			
			[Bindable]  
			public var arr:ArrayCollection = new ArrayCollection();  
			
			[Bindable]  
			private var stateText : String = "请选择要导入的Execl表.";  
			
			
			private var file : FileReference = new FileReference();  
			
			protected override function createChildren():void  
			{  
				super.createChildren();  
				file.addEventListener(Event.SELECT,file_select);  
				//是否上传完成  
				file.addEventListener(Event.COMPLETE,file_complete);  
				//上传的进度  
				file.addEventListener(ProgressEvent.PROGRESS,file_progerss);  
			}  
			
			
			//选择上传的Execl  
			private function file_select(e:Event):void  
			{  
				stateText = file.name;  
			}  
			
			//上传状态        
			private function file_complete(e:Event):void  
			{  
				var byteArray:ByteArray = new ByteArray();  
				byteArray = file.data;  
				byteArray.position = 0;  
				
				xls = new ExcelFile();  
				xls.loadFromByteArray(byteArray);  
				sheet = xls.sheets[0];  
				
				var i:int;  
				var len : int = sheet.values.length;  
				
				for(i = 2; i < len - 1; i++)  
				{  
					arr.addItem({xm:sheet.values[i][0],nl:sheet.values[i][1],xl:sheet.values[i][2],lxdh:sheet.values[i][3],lxdz:sheet.values[i][4]});  
				}  
				Alert.okLabel = "确定";  
				Alert.show("共导入:"+(sheet.values.length - 3)+"条数据!","恭喜",Alert.OK);  
			}  
			
			//进度  
			private function file_progerss(e:ProgressEvent):void  
			{  
				progressBar.label = "已上传 " + Math.round(100 * e.bytesLoaded / e.bytesTotal) + "%";  
				progressBar.setProgress(Math.round(100 * e.bytesLoaded / e.bytesTotal),100);  
				
			}  
			
			
			//上传  
			private function upload():void  
			{  
				if(file.size > 0)  
				{  
					file.load();  
				}  
			}  
			
			
		]]>  
	</fx:Script>  
	<fx:Declarations>  
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->  
	</fx:Declarations>  
	<s:Panel x="23" y="34" width="334" height="177" title="读取Execl" dropShadowVisible="false">  
		<s:TextInput x="25" y="27" width="196" text="{stateText}"/>  
		<s:Button x="239" y="27" label="浏览..." click="file.browse();"/>  
		<mx:ProgressBar x="25" y="78" height="26" width="195" id="progressBar"/>  
		<s:Button x="239" y="72" label="上传" click="upload();"/>  
	</s:Panel>  
	<mx:DataGrid x="365" y="57" width="404" height="154" dataProvider="{arr}">  
		<mx:columns>  
			<mx:DataGridColumn headerText="姓名" dataField="xm"/>  
			<mx:DataGridColumn headerText="年龄" dataField="nl"/>  
			<mx:DataGridColumn headerText="学历" dataField="xl"/>  
			<mx:DataGridColumn headerText="联系电话" dataField="lxdh"/>  
			<mx:DataGridColumn headerText="联系地址" dataField="lxdz"/>  
		</mx:columns>  
	</mx:DataGrid>  
	<s:Label x="365" y="37" text="显示导入的Execl数据" width="160" height="22"/>  
</s:Application> 

 4.运行结果如下图所示:



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值