adjunto el código que utilizo..
Código Flex :
import com.as3xls.xls.ExcelFile; import com.as3xls.xls.Sheet; import flash.errors.IllegalOperationError; import flash.net.FileReference; import flash.utils.ByteArray; import mx.collections.ArrayCollection; import mx.collections.ICollectionView; import mx.collections.IViewCursor; import mx.collections.XMLListCollection; import mx.controls.DataGrid; public class exportExcel { public function exportExcel() { throw new IllegalOperationError("Class \"exportExcel\" is static. You can't instance this"); } //----------------------------- // Public function //----------------------------- /** * * Exporta los datos de un datagrid hacia un Excel. * Toma el dataProvider del mismo y las columnas para su exportacion * * @param dg Referencia al datagrid * @defaultName Nombre default con el que se va a generar el archivo excel * */ static public function dataGridExporter(dg:DataGrid, defaultName:String):void { if (dg == null || dg.dataProvider == null || defaultName == null || defaultName == "") return; var cols:Number = 0; var colsValues:Array = []; var cantCols:Number = dg.columnCount; var fieldT:String; var headerT:String; // armo el listado de headers y variables para cada columna for ( ; cols < cantCols; cols++) { headerT = (dg.columns[cols] as Object).headerText fieldT = (dg.columns[cols] as Object).dataField; if ( fieldT == null || fieldT == "" || headerT == null || headerT == "") continue; colsValues.push({ header:headerT, value:fieldT }); } if ( colsValues.length == 0 ) return; exportExcel.export(dg.dataProvider, colsValues, defaultName); } /** * * Export to Excell * * @param obj Objeto simple, XML, XMLList, Array, ArrayCollection o XMLListCollection * que se quiere exportar a excel * @colsValues Listado de objetos que indican cual es el nombre de la columna * y que propiedad del objeto se utiliza para sacar los datos de la columna * {header:"nombre del header", value:"propiedad del objeto que contiene el valor"} * @param defaultName Nombre default con el que se genera el excel * */ static public function export(obj:Object, colsValues:Array, defautlName:String):void { var _dp:ICollectionView = exportExcel.getDataProviderCollection(obj); if ( _dp == null ) return; var rows:Number = 0; var cols:Number = 0; var cantCols:Number = colsValues.length; var sheet:Sheet = new Sheet(); sheet.resize(_dp.length, colsValues.length); for ( ; cols < cantCols; cols++) { sheet.setCell(rows, cols, quitarAcentos(colsValues[cols].header)); } cols = 0; rows++; var cursor:IViewCursor = _dp.createCursor(); while ( !cursor.afterLast ) { for (cols = 0 ; cols < cantCols; cols++) { if ( (cursor.current as Object).hasOwnProperty(colsValues[cols].value) ) sheet.setCell(rows, cols,(quitarAcentos(String( (cursor.current as Object)[colsValues[cols].value])))=="NULL"?"":quitarAcentos(String( (cursor.current as Object)[colsValues[cols].value]))); } rows++; cursor.moveNext(); } var xls:ExcelFile = new ExcelFile(); xls.sheets.addItem(sheet); var bytes:ByteArray = xls.saveToByteArray(); var fr:FileReference = new FileReference(); fr.save(bytes, defautlName); } /**Quita los acentos */ static private function quitarAcentos(textoConAcentos:String):String { var texto1:String = textoConAcentos as String; var acentos:Array=new Array("á","é","í","ó","ú"); var sinAcentos:Array=new Array("a","e","i","o","u"); function CambiaCaracter(texto:String,letraSplit:String,letraCambio:String):String { var letras:Array=texto.split(letraSplit); var nuevoTexto:String=new String(); for (var i:int=0;i < letras.length;i++) { nuevoTexto+=letras[i]; nuevoTexto+=letraCambio; } nuevoTexto=nuevoTexto.substring(0,nuevoTexto.length-1); return nuevoTexto; } for (var i:int=0; i < acentos.length; i++) { texto1 = CambiaCaracter(texto1.toLocaleLowerCase(),acentos[i],sinAcentos[i]); } return texto1.toUpperCase(); } //----------------------------- // Private function //----------------------------- /** * * A partir de un elemento pasado se genera un ICollectionView * para su correcto recorrido * * @param obj Objeto a convertir a ICollectionView * * * @return referencia a un ICollectionView. * */ static private function getDataProviderCollection(obj:Object):ICollectionView { if ( (obj is Number && isNaN(obj as Number)) || (!(obj is Number) && obj == null)) { return null; } else if ( obj is ICollectionView ) { return obj as ICollectionView; } else if ( obj is Array ) { return new ArrayCollection(obj as Array); } else if ( obj is XMLList ) { return new XMLListCollection(obj as XMLList); } else if ( obj is XML ) { var col:XMLListCollection = new XMLListCollection(); col.addItem(obj); return col; } else if ( obj is Object ) { return new ArrayCollection([obj]); } else { return null; } } }
Gracias.