Você está na página 1de 11

http://megaerp.blogspot.com.br/2015/09/exportar-dados-para-o-excel.

html

Exportar Dados Para o Excel


 renato bernardo 

No exemplo abaixo utilizamos um parambox e a função FWMSEXCEL para


fazer o export para o excel.

Uma coisa importante de saber antes de usar esta função é a limitação de 40


mil linhas utilizando esta função.

Para casos onde demanda a gravação de dados muito pesada utilize a


gravação em arquivos.

Outra opção é utilizar o TReport, porém quando a extração é muito grande,


fica muito lenta a emissão do relatório.

#Include 'Protheus.ch'

#Include 'Totvs.ch'

//+-------------------------------------------------------------------+

//| Rotina | Aula01 | Autor | José Felipe | Data | 10.07.2015 


//+-------------------------------------------------------------------+

//| Descr. | Exemplo de rotina para geração de arquivo XML utilizando

//| | o método FWMsExcel

//+-------------------------------------------------------------------+

//| Uso | Genérico

//+-------------------------------------------------------------------+

User Function Aula01()

Local nOpc := 0

Local aRet := {}

Local aCombo := {"Excel","Relatório"}

Local aParamBox := {}

Private cTitulo := "Exemplo da Aula 01 - Excel"

Private aSay := {}

Private aButton := {}

Private cAliasA := GetNextAlias()


AAdd( aSay , "Este exemplo irá mostrar o uso de Formbatch, Parambox" )

AAdd( aSay , "e também gerar no formato Excel utilizando o método


FWMsExcel")

AAdd( aSay , "")

AAdd( aSay, "Clique para continuar...")

aAdd( aButton, { 1,.T.,{|| nOpc := 1,FechaBatch()}})

aAdd( aButton, { 2,.T.,{|| FechaBatch() }} )

FormBatch( cTitulo, aSay, aButton )

If nOpc == 1

MsgInfo('Esta primeira tela foi um exemplo do FormBatch. A próxima etapa


será exemplo do Parambox',cTitulo)

aAdd(aParamBox,{9 ,"Exemplo de demonstração do Parambox",150,7,.T.})

aAdd(aParamBox,{1 ,"Matricula de:" ,Space(06),"","","SRA","",0,.F.}) // Tipo


caractere
aAdd(aParamBox,{1 ,"Matricula Ate:" ,Space(06),"","","SRA","",0,.T.}) // Tipo
caractere

aAdd(aParamBox,{3 ,"Gerar no formato:",1,aCombo,50,"",.T.})

aAdd(aParamBox,{11,"Observação" ,"",".T.",".T.",.T.})

aAdd(aParamBox,{1 ,"Nome do Arquivo" ,Space(15),"@!","","","",0,.F.}) // Tipo


caractere

If ParamBox(aParamBox,"Teste Parâmetros...",@aRet)

IF Alltrim( Str(aRet[4]) ) == '1'

FWMsgRun(, {|| A010Query( aRet ) },'Aula 01 - Geração Excel','Gerando excel,


aguarde...')

Else

U_RCOMR01()

EndIF 

EndIF

EndIF

Return
//+-------------------------------------------------------------------+

//| Rotina | A010Query | Autor | José Felipe | Data | 10.07.2015 

//+-------------------------------------------------------------------+

//| Descr. | Cria a query conforme parâmetros no Parambox

//+-------------------------------------------------------------------+

//| Uso | Genérico

//+-------------------------------------------------------------------+

Static Function A010Query( aRet )

Local cQuery := ''

Local cMV_par01 := ''

Local cMV_par02 := ''

Local cMV_par03 := ''

Local cMV_par04 := ''

//Atribui conforme o Parambox enviou

cMV_par01 := aRet[2]

cMV_par02 := aRet[3]
cMV_par03 := aRet[5]

cMV_par04 := aRet[6]

cQuery := "SELECT RA_FILIAL," + CRLF

cQuery += " RA_MAT," + CRLF

cQuery += " RA_NOME," + CRLF

cQuery += " RA_CC," + CRLF

cQuery += " CTT_DESC01," + CRLF

cQuery += " RA_CIC," + CRLF

cQuery += " RA_RG," + CRLF

cQuery += " RA_ADMISSA," + CRLF

cQuery += " RA_SALARIO" + CRLF

cQuery += "FROM " + RetSqlName("SRA") + " SRA " + CRLF 

cQuery += " JOIN " + RetSqlName("CTT") + " CTT " + CRLF 

cQuery += " ON CTT_CUSTO = RA_CC AND CTT.D_E_L_E_T_ = ' ' " + CRLF 

cQuery += "WHERE SRA.D_E_L_E_T_ = ' ' " + CRLF

cQuery += " AND SRA.RA_FILIAL = '" + xFilial("SRA") + "' " + CRLF


cQuery += " AND SRA.RA_MAT >= '" + cMV_par01 + "' " + CRLF

cQuery += " AND SRA.RA_MAT <= '" + cMV_par02 + "' " + CRLF

cQuery += "ORDER BY RA_FILIAL, " + CRLF 

cQuery += " RA_MAT ASC " 

cQuery := ChangeQuery(cQuery)

IF Select( cAliasA ) > 0

dbSelectArea( cAliasA )

dbCloseArea()

EndIF

dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), cAliasA, .F., .T.)

IF .NOT. Eof( cAliasA )

A010Excel( cAliasA, cMV_par03, cMV_par04 )

Else
MsgAlert('A query não retornou registros, por favor verifique os parâmetros
informados.', cTitulo)

EndIF

Return

//+-------------------------------------------------------------------+

//| Rotina | A010Excel | Autor | José Felipe | Data | 10.07.2015 

//+-------------------------------------------------------------------+

//| Descr. | Gera o arquivo XML conforme query realizada. 

//+-------------------------------------------------------------------+

//| Uso | Genérico

//+-------------------------------------------------------------------+

Static Function A010Excel( cAliasA, cMV_par03, cMV_par04 )

Local cWorkSheet := 'Relatório de Funcionários'

Local cTable := 'Funcionários'

Local oExcel := Nil

Local cPath := GetTempPath() //Função que retorna o caminho da pasta temp


do usuário logado, exemplo: %temp%

Local cNameFile := cPath + RTrim(cMV_par04) + ".XML"

oExcel := FWMSEXCEL():New() //Método para geração em XML

oExcel:AddworkSheet( cWorkSheet ) //Adiciona uma Worksheet ( Planilha )

oExcel:AddTable ( cWorkSheet, cTable ) //Adiciona uma tabela na Worksheet.


Uma WorkSheet pode ter apenas uma tabela

//Adiciona uma coluna a tabela de uma Worksheet.

// AddColumn( cWorkSheet, cTable, < cColumn > , nAlign, nFormat, lTotal)

oExcel:AddColumn( cWorkSheet, cTable, "Filial" , 1 , 1 , .F. )

oExcel:AddColumn( cWorkSheet, cTable, "Matricula" , 1 , 1 , .F. )

oExcel:AddColumn( cWorkSheet, cTable, "Nome" , 1 , 1 , .F. )

oExcel:AddColumn( cWorkSheet, cTable, "C. Custo" , 1 , 1 , .F. )

oExcel:AddColumn( cWorkSheet, cTable, "Desc. C. Custo", 1 , 1 , .F. )

oExcel:AddColumn( cWorkSheet, cTable, "CPF" , 1 , 1 , .F. )

oExcel:AddColumn( cWorkSheet, cTable, "RG" , 1 , 1 , .F. )


oExcel:AddColumn( cWorkSheet, cTable, "Admissão" , 1 , 4 , .F. )

oExcel:AddColumn( cWorkSheet, cTable, "Salário" , 3 , 3 , .T. )

oExcel:AddColumn( cWorkSheet, cTable, "Observação" , 1 , 1 , .F. )

//nAlign > Alinhamento da coluna ( 1-Left,2-Center,3-Right )

//nFormat > Codigo de formatação ( 1-General,2-Number,3-Monetário,4-


DateTime )

//lTotal > Indica se a coluna deve ser totalizada

While .NOT. Eof( cAliasA )

oExcel:AddRow( cWorkSheet, cTable, { (cAliasA)->RA_FILIAL, (cAliasA)->RA_MAT,


(cAliasA)->RA_NOME, (cAliasA)->RA_CC,; 

(cAliasA)->CTT_DESC01, (cAliasA)->RA_CIC, (cAliasA)->RA_RG, sToD((cAliasA)-


>RA_ADMISSA),;

(cAliasA)->RA_SALARIO, cMV_par03 })

(cAliasA)->( dbSkip() )

End
oExcel:Activate() //Executa o XML

oExcel:GetXMLFile( cNameFile ) //Salva o arquivo no diretório

ShellExecute( "Open", cNameFile , '', '', 1 ) //Abre o arquivo na tela após salvar 

Return

Você também pode gostar