Ver Mensaje Individual
  #4 (permalink)  
Antiguo 19/02/2010, 16:36
Avatar de Sergestux
Sergestux
 
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 17 años, 3 meses
Puntos: 20
Respuesta: Crear un EXEL desde un DATAGRID

No tienes que crear tantas carpetas como lo hacen ellos, basta con que crees una que se llama com, dentro de ella otra que se llame utils, o como desees y dentro de esa carpeta puedes pegar el codigo de la clase que te mencione (ExcelExporterUtil.as).

En tu codigo principal, donde vayas a exportar a excel importas la clase y en una funcion la usas:


Código Javascript:
Ver original
  1. import com.utils.ExcelExporterUtil;
  2.  
  3. //Importa a excel el grid
  4.         private function ExportarExcel(Archivo:String="Archivo"):void
  5.         {          
  6.             var NomFile:String=this.title;
  7.             ExcelExporterUtil.dataGridExporter(GridId, NomFile + ".xls");
  8.         }
GridId es el id del grid que quieres exportar a excel



Clase que debe ir en la carpeta com -> utils -> ExcelExporterUtil.as

Código Javascript:
Ver original
  1. package com.utils
  2. {
  3.    import com.as3xls.xls.ExcelFile;
  4.    import com.as3xls.xls.Sheet;
  5.    
  6.    import flash.errors.IllegalOperationError;
  7.    import flash.net.FileReference;
  8.    import flash.utils.ByteArray;
  9.    
  10.    import mx.collections.ArrayCollection;
  11.    import mx.collections.ICollectionView;
  12.    import mx.collections.IViewCursor;
  13.    import mx.collections.XMLListCollection;
  14.    import mx.controls.DataGrid;
  15.    
  16.    /**
  17.     *
  18.     * Author: Andrés Lozada Mosto
  19.     * Version: 0.1
  20.     * Fecha release: 10/03/2009
  21.     * Contacto: [email protected]
  22.     *  
  23.     * Clase que maneja la exportacion de elementos
  24.     * a Excel.
  25.     *  
  26.     * Se utiliza el proyecto http://code.google.com/p/as3xls/  
  27.     * para la generacion de Excel.
  28.     *  
  29.     * Se necesita la version 10 de Flash player para realizar el correcto
  30.     * guardado del archivo sin pasar por backend.
  31.     *  
  32.     * @example
  33.     * <code>
  34.     * private var flat:ArrayCollection = new ArrayCollection([
  35.     *                              {nombre:"Andrés", apellido:"Sanchez"},
  36.     *                              {nombre:"Mónica", apellido:"Sanchez"},
  37.     *                              {nombre:"Agustina", apellido:"Sanchez"},
  38.     *                              {nombre:"Pablo", apellido:"Sanchez"},
  39.     *                              {nombre:"Magalí", apellido:"Sanchez"}
  40.     *                              ]);
  41.     * ExcelExporterUtil.dataGridExporter(this.dg, "prueba_excel.xls");
  42.     * </code>
  43.     *  
  44.     * Lista de funciones
  45.     * <list>
  46.     *  dataGridExporter:       Exporta un datagrid a un excel de forma automatica
  47.     *  export:             Exporta un listado de objetos
  48.     * </list>
  49.          *
  50.     */
  51.  
  52.    public class ExcelExporterUtil
  53.    {
  54.       public function ExcelExporterUtil()
  55.       {
  56.          throw new IllegalOperationError("Class \"ExcelExporterUtil\" is static. You can't instance this");
  57.       }
  58.        
  59.       //-----------------------------
  60.       // Public function
  61.       //-----------------------------
  62.       /**
  63.        *  
  64.        * Exporta los datos de un datagrid hacia un Excel.
  65.        * Toma el dataProvider del mismo y las columnas para su exportacion
  66.        *  
  67.        * @param dg          Referencia al datagrid
  68.        * @defaultName         Nombre default con el que se va a generar el archivo excel
  69.        *  
  70.        */
  71.       static public function dataGridExporter(dg:DataGrid, defaultName:String):void
  72.       {
  73.          if (dg == null || dg.dataProvider == null || defaultName == null || defaultName == "")
  74.             return;
  75.          
  76.          var cols:Number = 0;
  77.          var colsValues:Array = [];
  78.          var cantCols:Number = dg.columnCount;
  79.          var fieldT:String;
  80.          var headerT:String;
  81.          
  82.          // armo el listado de headers y variables para cada columna
  83.          for ( ; cols < cantCols; cols++)
  84.          {
  85.             headerT = (dg.columns[cols] as Object).headerText
  86.             fieldT = (dg.columns[cols] as Object).dataField;
  87.             if ( fieldT == null || fieldT == "" || headerT == null || headerT == "")
  88.                continue;  
  89.             colsValues.push({
  90.                         header:headerT,
  91.                         value:fieldT
  92.             });
  93.          }
  94.          
  95.          if ( colsValues.length == 0 )
  96.             return;
  97.              
  98.          ExcelExporterUtil.export(dg.dataProvider, colsValues, defaultName);
  99.       }
  100.        
  101.       /**
  102.        *  
  103.        * Export to Excell
  104.        *  
  105.        * @param obj          Objeto simple, XML, XMLList, Array, ArrayCollection o XMLListCollection
  106.        *                   que se quiere exportar a excel
  107.        * @colsValues         Listado de objetos que indican cual es el nombre de la columna
  108.        *                   y que propiedad del objeto se utiliza para sacar los datos de la columna
  109.        *                   {header:"nombre del header", value:"propiedad del objeto que contiene el valor"}
  110.        * @param defaultName   Nombre default con el que se genera el excel
  111.        *  
  112.        */
  113.       static public function export(obj:Object, colsValues:Array, defautlName:String):void
  114.       {
  115.          var _dp:ICollectionView = ExcelExporterUtil.getDataProviderCollection(obj);
  116.          if ( _dp == null )
  117.             return;
  118.          
  119.          var rows:Number = 0;
  120.          var cols:Number = 0;
  121.          var cantCols:Number = colsValues.length;
  122.          var sheet:Sheet = new Sheet();
  123.          sheet.resize(_dp.length+1, colsValues.length); //El +1 es Para incluir el ultimo renglon
  124.          
  125.          for ( ; cols < cantCols; cols++)
  126.          {
  127.             sheet.setCell(rows, cols, colsValues[cols].header);
  128.          }
  129.          
  130.          cols = 0;
  131.          rows++;
  132.          var cursor:IViewCursor = _dp.createCursor();
  133.          while ( !cursor.afterLast )
  134.          {
  135.             for (cols = 0 ; cols < cantCols; cols++)
  136.             {
  137.                if ( (cursor.current as Object).hasOwnProperty(colsValues[cols].value) )
  138.                      sheet.setCell(rows, cols, (cursor.current as Object)[colsValues[cols].value]);
  139.             }
  140.              
  141.             rows++;
  142.             cursor.moveNext();
  143.          }
  144.  
  145.          
  146.          var xls:ExcelFile = new ExcelFile();
  147.          xls.sheets.addItem(sheet);
  148.          var bytes:ByteArray = xls.saveToByteArray();
  149.          
  150.          var fr:FileReference = new FileReference();
  151.          fr.save(bytes, defautlName);
  152.       }
  153.        
  154.       //-----------------------------
  155.       // Private function
  156.       //-----------------------------
  157.       /**
  158.        *  
  159.        * A partir de un elemento pasado se genera un ICollectionView
  160.        * para su correcto recorrido
  161.        *  
  162.        * @param obj         Objeto a convertir a ICollectionView
  163.        *  
  164.        *  
  165.        * @return referencia a un ICollectionView.  
  166.        *  
  167.        */
  168.       static private function getDataProviderCollection(obj:Object):ICollectionView
  169.       {
  170.          if ( (obj is Number && isNaN(obj as Number)) || (!(obj is Number) && obj == null))
  171.          {
  172.             return null;
  173.          }
  174.          else if ( obj is ICollectionView )
  175.          {
  176.             return obj as ICollectionView;
  177.          }
  178.          else if ( obj is Array )
  179.          {
  180.             return new ArrayCollection(obj as Array);
  181.          }
  182.          else if ( obj is XMLList )
  183.          {
  184.             return new XMLListCollection(obj as XMLList);
  185.          }
  186.          else if ( obj is XML )
  187.          {
  188.             var col:XMLListCollection = new XMLListCollection();
  189.             col.addItem(obj);
  190.             return col;
  191.          }
  192.          else if ( obj is Object )
  193.          {
  194.             return new ArrayCollection([obj]);
  195.          }
  196.          else
  197.          {
  198.             return null;
  199.          }
  200.       }
  201.    }
  202. }