FUNCTION GENERA_CSV()
dbSelectArea("TEMP1") // arquivo temporario de exemplo
TEMP1->( dbGoTop() )
// Chamada da função para geração co Arq. CSV
If MsgYesNO('Gerar Planilha em Excel agora ?')
MsgRun({||GeraExcel()},"Aguarde","Gerando dados para a Planilha",.F.)
Endif
DbSelectArea("TEMP1")
dbCloseArea()
Return
/***********************************/
Static Function GeraExcel()
/***********************************/
// Cria arquivo temporario
local cArqTrb1 := CriaTrab(NIL,.F.)
local aStru := {}
Local aHeader := {}
_cAlias := "TEMP1"
// array com os campos para a planilha
aadd(aHeader, {"EMP " ,"RA_EMPRESA" ,"@!",10,0,"","","C","TEMP1","R"})
aadd(aHeader, {"C.Custo" ,"RA_CC" ,"@!",06,0,"","","C","TEMP1","R"})
aadd(aHeader, {"Matricula" ,"RA_MAT" ,"@!",06,0,"","","C","TEMP1","R"})
aadd(aHeader, {"Nome" ,"RA_NOME" ,"@!",45,0,"","","C","TEMP1","R"})
aadd(aHeader, {"Admissao" ,"RA_ADMISSA" ,"@!",10,0,"","","C","TEMP1","R"})
aadd(aHeader, {"Demissao" ,"RA_DEMISSA" ,"@!",10,0,"","","C","TEMP1","R"})
aadd(aHeader, {"Cod func" ,"RA_CODFUNC" ,"@!",05,0,"","","C","TEMP1","R"})
aadd(aHeader, {"Descricao" ,"RJ_DESC" ,"@!",45,0,"","","C","TEMP1","R"})
aadd(aHeader, {"Salario" ,"RA_SALARIO" ,"@E 999,999.99",09,2,"","","N","TEMP1","R"})
aadd(aHeader, {" " ,"FIM" ,"@!",02,2,"","","N","TEMP1","R"})
MsgRun({||GeraCSV(_cAlias,,aHeader)},"Aguarde","Generando Planilha",.F.)
Return
/******************************************************/
Static Function geraCSV(_cAlias,_cFiltro,aHeader)
/******************************************************/
local cDirDocs := MsDocPath()
Local cArquivo := CriaTrab(,.F.)
Local cPath := AllTrim(GetTempPath())
Local oExcelApp
Local nHandle
Local cCrLf := Chr(13) + Chr(10)
Local nX
local _cArq := ""
_cFiltro := iif(_cFiltro==NIL, "",_cFiltro)
if !empty(_cFiltro)
(_cAlias)->(dbsetfilter({|| &(_cFiltro)} , _cFiltro))
endif
nHandle := fCreate(cDirDocs+""+cArquivo+".CSV",0)
If nHandle > 0
// Grava o cabecalho do arquivo
aEval(aHeader, {|e, nX| fWrite(nHandle, e[1] + If(nX < Len(aHeader), ";", "") ) } )
fWrite(nHandle, cCrLf ) // Pula linha
(_cAlias)->(dbgotop())
while (_cAlias)->(!eof())
for _ni := 1 to len(aHeader)
_uValor := ""
if aHeader[_ni,8] == "D" // Trata campos data
_uValor := dtoc(&(_cAlias + "->" + aHeader[_ni,2]))
elseif aHeader[_ni,8] == "N" // Trata campos numericos
_uValor := transform(&(_cAlias + "->" + aHeader[_ni,2]),aHeader[_ni,3])
elseif aHeader[_ni,8] == "C" // Trata campos caracter
_uValor := &(_cAlias + "->" + aHeader[_ni,2])
endif
if _ni <> len(aHeader)
fWrite(nHandle, _uValor + ";" )
endif
next _ni
fWrite(nHandle, cCrLf )
(_cAlias)->(dbskip())
enddo
fClose(nHandle)
Copy( cDirDocs+""+cArquivo+".CSV" , cPath, .T. )
If ! OleClient( 'MsExcel' )
MsgStop( 'MsExcel nao instalado')
Return
EndIf
oExcelApp := Excel():New()
oExcelApp:WorkBooks:Open( cPath+cArquivo+".CSV" ) // Abre uma planilha
oExcelApp:SetVisible(.T.)
Else
MsgStop("Falha na criação do arquivo")
Endif
(_cAlias)->(dbclearfil())
Return