`
fxtayj
  • 浏览: 11122 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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>

 

分享到:
评论
2 楼 linfeng0169 2016-01-18  
-1061: 调用可能未定义的方法 exportDataGrid (通过 static 类型 Class 引用)。
在 FlexToExcel.exportDataGrid(dt); 这个地方报个错!
1 楼 shuiyunbing 2015-01-14  
请问单元格样式怎么处理。

相关推荐

Global site tag (gtag.js) - Google Analytics