flex4:DataGrid导出到Excel

原文出自:http://arcadiocarballares.com/?p=683   Export data to Excel from spark DataGrid

 

    导出Excel工具类--AS文件: 

 

package es.util {
	import com.as3xls.xls.ExcelFile;
	import com.as3xls.xls.Sheet;

	import flash.errors.IllegalOperationError;
	import flash.net.FileReference;
	import flash.utils.ByteArray;

	import mx.controls.dataGridClasses.DataGridListData;

	import spark.components.DataGrid;
	import spark.components.gridClasses.GridColumn;

	public class FlexToExcel {
		public function FlexToExcel() {
			throw new IllegalOperationError ("Class "ExcelExporterUtil" is static. You can't instance this");
		}

		static public function exportDataGrid (dt:DataGrid, filename:String="excel.xls",
											   listData:DataGridListData=null):void {
			var head:Array = new Array();
			for each (var item:GridColumn in dt.columns.toArray()) {
				head.push(item.headerText);
			}

			var data:Array = new Array();

			for each (var obj:Object in dt.dataProvider) {
				var arr:Array=new Array();
				for each (var hd:GridColumn in dt.columns.toArray()) {
					arr.push(hd.itemToLabel(obj));
				}
				data.push(arr);
			}
			export(head,data,filename);
		}

		static private function export(head:Array, data:Array,filename:String):void {
			// Create sheet
			var cols:int = head.length;
			var rows:int = data.length+1;
			var sheet:Sheet = new Sheet();
			sheet.resize(rows,cols);

			// Header
			var row:int=0;
			var col:int=0;
			for each (var item:String in head) {
				sheet.setCell(row,col,item);
				col++;
			}

			// Data
			row=1;
			col=0;
			for each (var dataRow:Array in data) {
				for each (var dataCol:String in dataRow) {
					sheet.setCell(row,col,dataCol);
					col++;
				}
				col=0;
				row++;
			}

			// Add sheet
			var xls:ExcelFile = new ExcelFile();
			xls.sheets.addItem(sheet);
			var bytes:ByteArray = xls.saveToByteArray();
			// Generate file
			var fr:FileReference = new FileReference();
			fr.save(bytes, filename);
		}
	}
}

    mxml代码:

<?xml version="1.0"?>
<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">

	<s:layout>
		<s:VerticalLayout/>
	</s:layout>

	<fx:Script>
		<![CDATA[
			import es.util.FlexToExcel;
			import mx.collections.ArrayCollection;
			import spark.components.gridClasses.GridColumn;

			[Bindable]
			private var items:ArrayCollection = new ArrayCollection([
				{nombre:"Andrés", apellido:"Sánchez", date:new Date()},
				{nombre:"Mónica", apellido:"Sánchez", date:new Date()},
				{nombre:"Agustina", apellido:"Sánchez", date:new Date()},
				{nombre:"Pablo", apellido:"Sánchez", date:new Date()},
				{nombre:"Magalí", apellido:"Sánchez", date:new Date()}
			]);

			private function exportToExcel():void {
				FlexToExcel.exportDataGrid(dt);
			}

			private function getCompleteLabel (item:Object, column:GridColumn):String {
				var result:String = "";
				if (item != null) {
					result = item.nombre + " " + item.apellido;
				}
				return result;
			}
		]]>
	</fx:Script>

	<fx:Declarations>
		<s:DateTimeFormatter id="myFormatter" dateTimePattern="dd/MM/yyyy"
							 errorText="test error!"/>
	</fx:Declarations>

	<s:DataGrid id="dt" dataProvider="{items}" width="100%" height="100%">
		<s:columns>
			<s:ArrayList>
				<s:GridColumn dataField="nombre" headerText="Nombre"/>
				<s:GridColumn dataField="apellido" headerText="Apellido"/>
				<s:GridColumn headerText="Completo" labelFunction="getCompleteLabel"/>
				<s:GridColumn headerText="Fecha" dataField="date" itemRenderer="es.renderer.DateRenderer"
							  formatter="{myFormatter}"/>
			</s:ArrayList>
		</s:columns>
	</s:DataGrid>

	<s:Button label="Export" click="exportToExcel();" />
</s:Application>

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值