加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flex导出excel

发布时间:2020-12-15 03:56:36 所属栏目:百科 来源:网络整理
导读:封装成类,使用更方便: package{import com.as3xls.xls.Cell; import mx.collections.ArrayCollection; import flash.events.*; import flash.net.FileReference; import com.as3xls.xls.Sheet; import com.as3xls.xls.ExcelFile; import mx.controls.Alert

封装成类,使用更方便:

package
{
	import com.as3xls.xls.Cell;  
	import mx.collections.ArrayCollection;  
	import flash.events.*;  
	import flash.net.FileReference;  
	import com.as3xls.xls.Sheet;  
	import com.as3xls.xls.ExcelFile;  
	import mx.controls.Alert;  
	import mx.controls.DataGrid;  
	import mx.controls.dataGridClasses.DataGridColumn;  
	import flash.utils.ByteArray;  
	import mx.controls.Alert; 

	public class ExportToExcel
	{
		public function ExportToExcel()
		{
		}
		public static function exportToExcel(myDg:DataGrid):void  
		{    
			
			var fields:Array = new Array();   
			var sheet:Sheet= new Sheet();  			
			var dataProviderCollection:ArrayCollection =myDg.dataProvider as ArrayCollection;  
			var rowCount:int =  dataProviderCollection.length;/**获得表格的行数**/    
			sheet.resize(rowCount+1,myDg.columnCount);/**设置表格的行数(rowCount+1),列数(myDg.columnCount)**/    
			var columns:Array = myDg.columns;/**获得DateGrid列的内容**/     
			/**循环设置列名的值**/  
			var i:int = 0;   
			for each (var field:DataGridColumn in columns)  
			{    
				fields.push(field.dataField.toString());   
				sheet.setCell(0,i,field.headerText.toString());/**第一行的值,取值为myDg的headerText**/     
				i++;   
			}  
			/**循环设置行的值**/  
			for(var r:int=0;r<rowCount;r++)  
			{  
				var record:Object =dataProviderCollection.getItemAt(r);/**获得dataProviderCollection的每行Item的对象**/    
				insertRecordInSheet(r+1,sheet,record);/**调用回调函数写入sheet**/    
			}  
			 
			var xls:ExcelFile = new ExcelFile(); /**生成Excel文件**/  
			xls.sheets.addItem(sheet); /**将sheet写入Excel文件中**/   
			var bytes: ByteArray = xls.saveToByteArray(); /**将xls对象转换为ByteArray流对象**/   
			var fr:FileReference = new FileReference(); /**生成新文件域**/   
			fr.save(bytes,"SampleExport.xls");  /**将bytes流对象保存到文件域**/ 
			fr.addEventListener(Event.COMPLETE,function (){
				Alert.show("保存成功");
			});
			/**回调函数**/  
			function insertRecordInSheet(row:int,sheet:Sheet,record:Object):void  
			{  
				var colCount:int = myDg.columnCount;  
				for(var c:int; c < colCount; c++)   
				{   
					var i:int = 0;   
					for each(var field:String in fields)  
					{   
						for each (var value:String in record)  
						{   
							if (record[field].toString() == value) /**循环判断myDg列名域值record[field]与value是否相等**/    
								 
								sheet.setCell(row,value); /**写入表格中**/   
						}   
						i++;   
					}   
				}  
			}  
		} 
	}
}
前台代码:
<?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 mx.collections.ArrayCollection;
			[Bindable] 
			private var ItemDGDataProvider:ArrayCollection = new ArrayCollection([ 
				{name:"Item1",value:"21",qty:"3",cost:"12.21",apples: "1"},{name:"Item2",value:"20",qty:"4",cost:"12.22",{name:"Item3",value:"22",qty:"5",cost:"12.23",{name:"Item4",value:"23",qty:"2",cost:"12.24",apples: "1"} 
			]);     
			public function exportTo():void  
			{   
				ExportToExcel.exportToExcel(myDg);///调用ExportToExcel类的静态方法   
			}  
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<mx:DataGrid id="myDg" dataProvider="{ItemDGDataProvider}" width="533" editable="true"/> 
	<mx:Button id="myBtn" x="619" y="113" label="exporttoexcel" click="exportTo();"/> 
</s:Application>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读