封装成类,使用更方便:
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,i,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", apples: "1"},
{name:"Item3",value:"22",qty:"5",cost:"12.23", apples: "1"},
{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>