Foros del Web » Creando para Internet » Flash y Actionscript »

Crear un EXEL desde un DATAGRID

Estas en el tema de Crear un EXEL desde un DATAGRID en el foro de Flash y Actionscript en Foros del Web. Hola, sabéis como se puede crear un exel, apartir de un Datagrid? Saludos!!...
  #1 (permalink)  
Antiguo 18/02/2010, 10:58
 
Fecha de Ingreso: diciembre-2004
Mensajes: 296
Antigüedad: 19 años, 4 meses
Puntos: 1
Crear un EXEL desde un DATAGRID

Hola, sabéis como se puede crear un exel, apartir de un Datagrid?

Saludos!!
__________________
Visitar:
www.vinosyrecetas.com
www.galerias-arte.com
  #2 (permalink)  
Antiguo 18/02/2010, 12:09
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: Crear un EXEL desde un DATAGRID

Yo use una libreria que pusieron en cristalabs y me funciona muy bien
  #3 (permalink)  
Antiguo 18/02/2010, 16:39
 
Fecha de Ingreso: diciembre-2004
Mensajes: 296
Antigüedad: 19 años, 4 meses
Puntos: 1
Respuesta: Crear un EXEL desde un DATAGRID

Hola,

La he probado y me he bajado este SWC de este link

http://code.google.com/p/as3xls/

Pero no se como inscrustarlo en el FLEX

Aparte me peta en el

import com.as3xls.xls.ExcelFile;

Que puede ser que por no poner el SWC.

Yo he copiado el código tal cual y luego he añadido la clase pero lo del pakage

import com.kcc.tempos.utils.exporter.ExcelExporterUtil;

lo he puesto así import exporter.ExcelExporterUtil;

sin com.kcc.tempos.utils. que no se como lo ponen ellos.
¿Me puedes explicar alguna cosa que hago mal? Por no decir todo..

Muchas gracias y un saludo!
__________________
Visitar:
www.vinosyrecetas.com
www.galerias-arte.com
  #4 (permalink)  
Antiguo 19/02/2010, 16:36
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 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. }
  #5 (permalink)  
Antiguo 22/02/2010, 05:37
 
Fecha de Ingreso: diciembre-2004
Mensajes: 296
Antigüedad: 19 años, 4 meses
Puntos: 1
Respuesta: Crear un EXEL desde un DATAGRID

Hola Sergestux, muchas gracias. Ya lo he hecho pero ahora me peta lo que te contaba anterior mente

import com.as3xls.xls.ExcelFile;
import com.as3xls.xls.Sheet;

Me dice que no están definidas.

¿He de hacer algo con esta librería? o ¿me he de bajar algo?
Saludos y gracias de nuevo.
__________________
Visitar:
www.vinosyrecetas.com
www.galerias-arte.com
  #6 (permalink)  
Antiguo 22/02/2010, 08:38
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: Crear un EXEL desde un DATAGRID

Si tienes mucha razon, te hace falta agregar la libreria.

En el menu Project -> Properties -> Flex Build Path ... Escoges la pestaña Library Path y de las opciones del lado derecho escoges Add SWC y y con esto buscas la libreria que bajaste .swc y ya no te deberia marcar algn error
  #7 (permalink)  
Antiguo 22/02/2010, 09:45
 
Fecha de Ingreso: diciembre-2004
Mensajes: 296
Antigüedad: 19 años, 4 meses
Puntos: 1
Respuesta: Crear un EXEL desde un DATAGRID

Pues muchas gracias, perfecto ahora ya no me peta esta librería, era eso que no sabía como instalar un swc.
Ahora hay una función llamada fr.save(bytes, defautlName); que me da un error de:

1061: Llamada a un método save posiblemente no definido mediante una referencia con tipo estático flash.net:FileReference. Graphics/src/com/utils
ExcelExporterUtil.as line 151 1266853191551 4615


es referente a la librería import flash.net.FileReference;

No se deja dominar este script. ¿Sabes si he de intalar o modificar el as?
De nuevo muchisimas gracias, y un saludo!!
__________________
Visitar:
www.vinosyrecetas.com
www.galerias-arte.com
  #8 (permalink)  
Antiguo 22/02/2010, 10:10
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: Crear un EXEL desde un DATAGRID

Segun tengo entendido file reference solo funciona bien para flash 10 en adelante, asi que lo que tienes que hacer es actualizar tu propio flash y pedir a los cleintes que se instale la version 10 x en adelante
Project -> Properties - > Felx compiler -> Require flash player version
  #9 (permalink)  
Antiguo 22/02/2010, 10:54
 
Fecha de Ingreso: diciembre-2004
Mensajes: 296
Antigüedad: 19 años, 4 meses
Puntos: 1
Respuesta: Crear un EXEL desde un DATAGRID

Si, ya tengo bajado el flash player 10, pero he buscado y ponía que tenía que tener el SDK 3.4, lo he instalado, ahora no me da este error pero me da un error de ColumnChart

1046: No se encontró el tipo o no es una constante en tiempo de compilación: ColumnChart

Como si no estuviese implementado, o algo así, en teoría la versión es estable, al menos lo pone.
__________________
Visitar:
www.vinosyrecetas.com
www.galerias-arte.com

Etiquetas: datagrid, exel, flex
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:14.