Pular para o conte

Artigos Recentes

20
Mar

Como exportar para Excel usando Flex + ASP

Como exportar para excel dados de um DataGrid no Adobe Flex 3 ? Parece um bixo de 7 cabeças mas na prática é mais simples. Sei que existem diversas maneiras mais fácil ainda de se exportar sem precisar de nenhum back-end, mas enfim, essa foi a meneira que resolvi meu problema e do meu cliente, espero poder ajudar com essa dica:

Primeiro Vamos criar o arquivo ASP:

Nome do ASP = “Excel.asp

<META http-equiv=”Content-Type” content=”text/html; charset=ISO-8859-1″>
<%
”// Nome do XLS que deseja ao salvar o arquivo
FileName = “ExportaExcel.xls”
”// Recebe variável do FLEX
response.write (request(“htmltable”))
”// Definimos o cabeçalho do arquivo
Response.ContentType = “application/vnd.ms-excel”
Response.AddHeader “content-disposition”,”attachment; filename=” & FileName
%>

Agora vamos criar uma classe no Adobe Flex com o nome = “ExportaGridExcel.as“  – Criei o arquivo dentro da pasta br.com.adobe.controls, caso você altere e coloque em caminhos diferentes, não esqueça de mudar o “package”.

package br.com.adobe.controls
{
import flash.errors.*;
import flash.events.*;
import flash.external.*;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.net.navigateToURL;

public class ExportaGridExcel
{
//Aplicação servidor que gerará o excel
public var urlExcelExport:String = “http://www.homologacaomimetica.com.br/adobepartnerclub/PainelFlex/asp/excel.asp”;

// Converte a datagrid para uma tabela html
private function convertDGToHTMLTable(dg:*):String {
var font:String = dg.getStyle(‘fontFamily’);
var size:String = (int(dg.getStyle(‘fontSize’))-2).toString(); //Reduz em 2, o tamanho da fonte.
var str:String = ”;
var colors:String = ”;
var style:String = ‘style=”font-family:’+font+’;font-size:’+size+’pt;”‘;
var hcolor:Array;

if(dg.getStyle(“headerColor”) != undefined) {
hcolor = [dg.getStyle("headerColor")];
} else {
hcolor = dg.getStyle(“headerColors”);
}

str+= ‘<table width=”‘+dg.width+’”><thead><tr width=”‘+dg.width+’” style=”background-color:#’ +Number((hcolor[0])).toString(16)+’”>’;

for(var i:int = 0;i<dg.columns.length;i++) {
colors = dg.getStyle(“themeColor”);

if(dg.columns[i].headerText != undefined && dg.columns[i].visible == true) {
str+=”<th “+style+”>”+dg.columns[i].headerText+”</th>”;
} else if (dg.columns[i].visible == true) {
str+= “<th “+style+”>”+dg.columns[i].dataField+”</th>”;
}
}
str += “</tr></thead><tbody>”;
colors = dg.getStyle(“alternatingRowColors”);

for(var j:int =0;j<dg.dataProvider.length;j++) {
str+=”<tr width=\”"+Math.ceil(dg.width)+”\”>”;

for(var k:int=0; k < dg.columns.length; k++) {
if(dg.dataProvider.getItemAt(j) != undefined && dg.dataProvider.getItemAt(j) != null && dg.columns[k].visible == true && dg.columns[k].dataField != “Melhor”) {
if(dg.columns[k].labelFunction != undefined && dg.columns[k].labelFunction != null && dg.columns[k].visible == true) {
str += “<td nowrap=\”nowrap\” width=\”"+Math.ceil(dg.columns[k].width)+”\” “+style+”>”+dg.columns[k].labelFunction(dg.dataProvider[j],dg.columns[k])+”</td>”;
} else {
str += “<td nowrap=\”nowrap\” width=\”"+Math.ceil(dg.columns[k].width)+”\” “+style+”>”+dg.dataProvider.getItemAt(j)[dg.columns[k].dataField]+”</td>”;
}
}
}
str += “</tr>”;
}
str+=”</tbody></table>”;

return str;
}

// Envia o HTML para a aplicação servidor

public function loadDGInExcel(dg:*):void {

var variables:URLVariables = new URLVariables();
variables.htmltable    = convertDGToHTMLTable(dg);

var u:URLRequest = new URLRequest(urlExcelExport);
u.data = variables;
u.method = URLRequestMethod.POST;
navigateToURL(u,”_self”);
}
}
}

E por fim, chamamos o Exporta Excel dentro do Script do Flex:

import br.com.adobe.controls.ExportaGridExcel;

private function ExportarExcel():void{
var dgE:ExportaGridExcel = new ExportaGridExcel();
dgE.loadDGInExcel(NOMEDAGRID);
}

Espero ter ajudado e inclusive, se você sabe fazer de uma forma diferente me envie para complementar esse post.

Lúcio Batistella