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 -~----------~----~----~----~------~----~------~--~---
