Precisava exportar os dados de um Datagrid para o excel, daí no google apareceu 
esta opção: http://mannu.livejournal.com/348299.html

Uma das modificações necessárias foi os números, já que eu precisava 
arredondálos antes de mandar pro clipboard então modifiquei um dos métodos da 
classe de exemplo.

Não sei se ajuda mas vê se algum destes métodos te dá alguma idéia, uma luz. :D

Bons códigos,
-Daniel

================================ CODIGO ORIGINAL 
==================================================
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";>
  <mx:Script>
    <![CDATA[
    import flash.events.KeyboardEvent;

    private function dataGridKeyDownHandler(event:KeyboardEvent):void
    {
      if (event.ctrlKey && !dataGrid.getChildByName("clipboardProxy"))
      {
        // Add an invisible TextField object to the DataGrid

        var textField:TextField = new TextField();
        textField.name = "clipboardProxy";
        dataGrid.addChild(textField);
        textField.visible = false;

        textField.type = TextFieldType.INPUT;
        textField.multiline = true;

        // Populate the TextField with selected data in TSV format

        textField.text = getTextFromItems(dataGrid.selectedItems);
        textField.setSelection(0, textField.text.length - 1);

        // Listen for textInput event

        textField.addEventListener(TextEvent.TEXT_INPUT,
            clipboardProxyPasteHandler);

        // Set player-level focus to the TextField

        systemManager.stage.focus = textField;
      }
    }

    private function dataGridKeyUpHandler(event:KeyboardEvent):void
    {
      if (!event.ctrlKey)
      {
        var textField:TextField = TextField(dataGrid
            .getChildByName("clipboardProxy"));
        if (textField)
          dataGrid.removeChild(textField);
      }
    }

    private function clipboardProxyPasteHandler(event:TextEvent):void
    {
      // Extract values from TSV format and populate the DataGrid

      var items:Array = getItemsFromText(event.text);
      for each (var item:Object in items)
        dataGrid.dataProvider.addItem(item);
    }

    private function getItemsFromText(text:String):Array
    {
      var rows:Array = text.split("\n");
      if (!rows[rows.length - 1])
        rows.pop();

      var columns:Array = dataGrid.columns;
      var itemsFromText:Array = [];

      for each (var rw:String in rows)
      {
        var fields:Array = rw.split("\t");

        var n:int = Math.min(columns.length, fields.length);
        var item:Object = {};
        for (var i:int = 0; i < n; i++)
          item[columns[i].dataField] = fields[i];

        itemsFromText.push(item);
      }

      return itemsFromText;  
    }

    private function getTextFromItems(items:Array):String
    {
      var columns:Array = dataGrid.columns;
      var textFromItems:String = "";

      for each (var it:Object in items)
      {
        for each (var c:DataGridColumn in columns)
          textFromItems += it[c.dataField] + "\t";
        textFromItems += "\n";
      }

      return textFromItems;
    }
    ]]>
  </mx:Script>

  <mx:DataGrid id="dataGrid" editable="true"
    keyDown="dataGridKeyDownHandler(event)"
    keyUp="dataGridKeyUpHandler(event)">
    <mx:columns>
      <mx:DataGridColumn headerText="Scheduled Date"
        dataField="scheduledDate" />
      <mx:DataGridColumn headerText="Home Team"
        dataField="homeTeam" />
      <mx:DataGridColumn headerText="Away Team"
        dataField="awayTeam" />
      <mx:DataGridColumn headerText="Field"
        dataField="field" />
    </mx:columns>
    <mx:dataProvider>
      <mx:Object scheduledDate="4/1/2006" homeTeam="Chester Bucks"
        awayTeam="Long Valley Hitters" field="Dawn Field" />
    </mx:dataProvider>
  </mx:DataGrid>

</mx:Application>

================================ CODIGO EDITADO 
==================================================


package classes
{
 import flash.events.KeyboardEvent;
 import mx.controls.DataGrid;
 import flash.events.TextEvent;
 import flash.text.TextField;
 import flash.text.TextFieldType;
 import mx.controls.dataGridClasses.DataGridColumn;
 import flash.system.System;
 import mx.utils.ObjectProxy;
 
 public class DataGridCopyLine
 {
  private var dataGrid:DataGrid;
  private var formatador:FormatadorNumerico = new FormatadorNumerico();
  
  public function DataGridCopyLine(dataGrid:Object) {
   super();
   this.dataGrid = dataGrid as DataGrid;
  }
  
  public function dataGridKeyDownHandler(event:KeyboardEvent):void
  {
   if (event.ctrlKey && !dataGrid.getChildByName("clipboardProxy"))
      {
       // Add an invisible TextField object to the DataGrid
  
          var textField:TextField = new TextField();
          textField.name = "clipboardProxy";
          dataGrid.addChild(textField);
          textField.visible = false;
  
          textField.type = TextFieldType.INPUT;
          textField.multiline = true;
  
          // Populate the TextField with selected data in TSV format
  
          textField.text = getTextFromItems(dataGrid.selectedItems);
          textField.setSelection(0, textField.text.length - 1);        
                     
          // Listen for textInput event
  
          textField.addEventListener(TextEvent.TEXT_INPUT,
              clipboardProxyPasteHandler);
  
          // Set player-level focus to the TextField
  
          //systemManager.stage.focus = textField;
                    
          dataGrid.stage.focus = textField;

        }
  }
  

  public function dataGridKeyUpHandler(event:KeyboardEvent):void
  {
   if (!event.ctrlKey)
      {
       var textField:TextField = 
TextField(dataGrid.getChildByName("clipboardProxy"));
          if (textField) {
            dataGrid.removeChild(textField);
          }                  
      }
  }
  
  private function clipboardProxyPasteHandler(event:TextEvent):void
  {
        // Extract values from TSV format and populate the DataGrid
  
   var items:Array = getItemsFromText(event.text);
      for each (var item:Object in items)
          dataGrid.dataProvider.addItem(item);
  }
  
  private function getItemsFromText(text:String):Array
  {
   var rows:Array = text.split("\n");
      if (!rows[rows.length - 1])
          rows.pop();
  
      var columns:Array = dataGrid.columns;
      var itemsFromText:Array = [];
  
      for each (var rw:String in rows)
      {
       var fields:Array = rw.split("\t");
  
          var n:int = Math.min(columns.length, fields.length);
          var item:Object = {};
          
          for (var i:int = 0; i < n; i++)
            item[columns[i].dataField] = fields[i];
  
          itemsFromText.push(item);
      }
  
      return itemsFromText;  
  }
  
  private function getTextFromItems(items:Array):String
  {
   var columns:Array = dataGrid.columns;
      var textFromItems:String = "";
  
      for (var i:int = 1; i <= items.length; i++ )
      {
       var it:Object = items[items.length-i] as Object;
       for each (var c:DataGridColumn in columns) {         
        var item:Object = it[c.dataField];
               
           if ( item is Number ) {
              textFromItems += formatador.format(item) + "\t";  //Esta classe é 
um NumberFormatter
             } else {
              var texto:String = String(item);
              
              if ( texto != "null" ) {
               textFromItems += item + "\t";
              } else {
               textFromItems += "\t";
              }
              
             }
       }
            
          textFromItems += "\n";
      }
  
      return textFromItems;
  }
 }
}


========================================= TABELA DE EXEMPLO 
===================================


<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml"; 
 width="100%" height="100%"
 allowMultipleSelection="true"
    keyDown="dataGridCopyLine.dataGridKeyDownHandler(event)"
    keyUp="dataGridCopyLine.dataGridKeyUpHandler(event)">
 <mx:NumberFormatter id="nf" decimalSeparatorFrom="," decimalSeparatorTo="." 
thousandsSeparatorFrom="." thousandsSeparatorTo=","/>
 <mx:Script>
  <![CDATA[
   import classes.DataGridCopyLine;
   import mx.utils.ObjectProxy;
   import classes.FormatadorNumerico;
   import mx.formatters.NumberFormatter;
   import classes.GrupoPotencialSimples;
   import flash.events.KeyboardEvent;

   private var formatador:FormatadorNumerico = new FormatadorNumerico();
   private var dataGridCopyLine:DataGridCopyLine = new DataGridCopyLine(this);
   
   private function sortCompare(grupo1:GrupoPotencialSimples, 
grupo2:GrupoPotencialSimples) : Number {           
    var perc1:Number = Number(nf.format(grupo1.percentual));
    var perc2:Number = Number(nf.format(grupo2.percentual));
    if( perc1 < perc2 ) return -1;
     else if( perc1 > perc2 ) return 1;
    else return 0;  
   }
   
   private function labelNumero(item:Object, column:DataGridColumn):String {   
       var numero:Number = Number(item[column.dataField]);        
       return formatador.format(numero);
      }
      
      
   
  ]]>
 </mx:Script>
 
 <mx:columns>
  <mx:DataGridColumn id="colLocal" headerText="Local" dataField="nome" 
fontWeight="bold"/>
  <mx:DataGridColumn id="colCob" headerText="Atuação" width="60" 
dataField="cobertura" fontWeight="bold"/>
  <mx:DataGridColumn id="colTotalReal" headerText="Real" dataField="totalReal" 
textAlign="right" sortCompareFunction="sortCompare" 
labelFunction="labelNumero"/>
  <mx:DataGridColumn id="colTotalDolar" headerText="Dolar" 
dataField="totalDolar" textAlign="right" sortCompareFunction="sortCompare" 
labelFunction="labelNumero"/>  
  <mx:DataGridColumn id="colPercentual" headerText="( % )" 
dataField="percentual" width="45" textAlign="right" 
sortCompareFunction="sortCompare" labelFunction="labelNumero"/>   
 </mx:columns>
</mx:DataGrid>

  ----- Original Message ----- 
  From: Thiago Rodrigues Fernandes 
  To: Grupo Flex-Brasil ; FlexDev 
  Sent: Tuesday, November 20, 2007 12:11 PM
  Subject: [flexdev] Recuperar Dados de um dataGrid


  Fala rapaziada...

  Seguinte, como seria recuperar os dados de um dataGrid...

  estou fazendo um sisteminha aqui que tem a idéia de uma planilha do excel. Tô 
usando datagrid pra idéia de planilha.

  Lá no datagrid o cara pode inserir os dados nas respectivas colunas e daí eu 
recupero os dados, crio um xml e salvo esse xml. Não estou conseguindo 
recuperar esses dados. 

  O que pensei foi em fazer um for pra percorrer ele:

  for (var i: int = 0; i < grdDias.rowCount; i++) {

  }

  mas eu tava verificando aqui e não sei porque quando dei um alert pra ver a 
quantidade de linhas: 

  Alert.show(grdDias.rowCount.toString(), "Qtd Linhas");

  ele imprimiu 18 sendo que são 31. Será porque?

  O engraçado é que o resultado do total de colunas também foi 18 sendo que são 
6.

  Alguém teria alguma outra idéia?

  Estou usando Flex com AIR.

  Grato.

  Thiago R. Fernandes

  

--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para [EMAIL PROTECTED]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a