
Pessoal fiz um exemplo que gera um documento do Excel, HTML ou Word dos dados de um DataGrid. É bem simples e utiliza o FileReference para salvar os arquivos.
Atenção: fique atento a codificação de caracteres que você utiliza no Flex e a que você utiliza na hora de gerar os documentos, pois pode ter problemas com acentuação das palavras.
Observação : para compilar esse projeto você precisa alterar a versão do flash player para 10, para isso clique com o botão direito no projeto, acesse a opção "Flex Compiler" e altere o campo "Require Flash Player version" para 10.0.0.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:TitleWindow x="154" y="59" styleName="opaquePanel">
<mx:DataGrid id="dtgLista" width="400" height="174" dataProvider="{dtpLista}">
<mx:columns>
<mx:DataGridColumn headerText="Codigo" dataField="codigo"/>
<mx:DataGridColumn headerText="Nome" dataField="nome"/>
<mx:DataGridColumn headerText="Idade" dataField="idade"/>
</mx:columns>
</mx:DataGrid>
<mx:ControlBar horizontalAlign="right">
<mx:Box direction="horizontal">
<mx:RadioButtonGroup id="rdgTipo"/>
<mx:RadioButton value="xls" label="XLS" groupName="rdgTipo" selected="true"/>
<mx:RadioButton value="html" y="45" label="HTML" groupName="rdgTipo"/>
<mx:RadioButton value="doc" label="DOC" groupName="rdgTipo"/>
</mx:Box>
<mx:Button label="Salvar Documento" click="gerar(dtgLista)"/>
</mx:ControlBar>
</mx:TitleWindow>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.controls.DataGrid;
[Bindable] private var dtpLista : Object =
[
{codigo : '1',nome : 'Luiz',idade : 23},
{codigo : '2',nome : 'Maria',idade : 20},
{codigo : '3',nome : 'Carlos',idade : 2},
{codigo : '4',nome : 'Da Silva',idade : 15},
{codigo : '5',nome : 'Marcela',idade : 28},
{codigo : '6',nome : 'André',idade : 24},
{codigo : '7',nome : 'José',idade : 23},
{codigo : '8',nome : 'Silva',idade : 21},
{codigo : '9',nome : '',idade : 5},
];
private function gerar(dtg : DataGrid):void
{
var i : int;
var j : int;
var html : String = "";
html+="<html><body>";
html+="<head>";
html+="<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>";
html+="</head>";
html+="<table border=1>";
//TITULOS DAS COLUNAS
html+="<tr>";
for(i=0;i<dtg.columns.length;i++)
{
html+="<td><b>"+dtg.columns[i].headerText+"</b></td>";
}
html+="</tr>";
//DADOS DO GRID
for(j=0;j<dtg.dataProvider.length;j++)
{
html+="<tr>";
for(i=0;i<dtg.columns.length;i++)
{
if(dtg.dataProvider[j][dtg.columns[i].dataField]){
html+="<td>"+(dtg.dataProvider[j][dtg.columns[i].dataField].toString() ? dtg.dataProvider[j][dtg.columns[i].dataField].toString() : " ")+"</td>";
}else{
html+="<td> </td>";
}
}
html+="</tr>";
}
html+="</table>";
html+="</body></html>";
new FileReference().save(html,"arquivo." + rdgTipo.selectedValue);
}
]]>
</mx:Script>
</mx:Application>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:TitleWindow x="154" y="59" styleName="opaquePanel">
<mx:DataGrid id="dtgLista" width="400" height="174" dataProvider="{dtpLista}">
<mx:columns>
<mx:DataGridColumn headerText="Codigo" dataField="codigo"/>
<mx:DataGridColumn headerText="Nome" dataField="nome"/>
<mx:DataGridColumn headerText="Idade" dataField="idade"/>
</mx:columns>
</mx:DataGrid>
<mx:ControlBar horizontalAlign="right">
<mx:Box direction="horizontal">
<mx:RadioButtonGroup id="rdgTipo"/>
<mx:RadioButton value="xls" label="XLS" groupName="rdgTipo" selected="true"/>
<mx:RadioButton value="html" y="45" label="HTML" groupName="rdgTipo"/>
<mx:RadioButton value="doc" label="DOC" groupName="rdgTipo"/>
</mx:Box>
<mx:Button label="Salvar Documento" click="gerar(dtgLista)"/>
</mx:ControlBar>
</mx:TitleWindow>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.controls.DataGrid;
[Bindable] private var dtpLista : Object =
[
{codigo : '1',nome : 'Luiz',idade : 23},
{codigo : '2',nome : 'Maria',idade : 20},
{codigo : '3',nome : 'Carlos',idade : 2},
{codigo : '4',nome : 'Da Silva',idade : 15},
{codigo : '5',nome : 'Marcela',idade : 28},
{codigo : '6',nome : 'André',idade : 24},
{codigo : '7',nome : 'José',idade : 23},
{codigo : '8',nome : 'Silva',idade : 21},
{codigo : '9',nome : '',idade : 5},
];
private function gerar(dtg : DataGrid):void
{
var i : int;
var j : int;
var html : String = "";
html+="<html><body>";
html+="<head>";
html+="<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>";
html+="</head>";
html+="<table border=1>";
//TITULOS DAS COLUNAS
html+="<tr>";
for(i=0;i<dtg.columns.length;i++)
{
html+="<td><b>"+dtg.columns[i].headerText+"</b></td>";
}
html+="</tr>";
//DADOS DO GRID
for(j=0;j<dtg.dataProvider.length;j++)
{
html+="<tr>";
for(i=0;i<dtg.columns.length;i++)
{
if(dtg.dataProvider[j][dtg.columns[i].dataField]){
html+="<td>"+(dtg.dataProvider[j][dtg.columns[i].dataField].toString() ? dtg.dataProvider[j][dtg.columns[i].dataField].toString() : " ")+"</td>";
}else{
html+="<td> </td>";
}
}
html+="</tr>";
}
html+="</table>";
html+="</body></html>";
new FileReference().save(html,"arquivo." + rdgTipo.selectedValue);
}
]]>
</mx:Script>
</mx:Application>


0 comentários:
Postar um comentário