Esta função gera uma planilha em Excel ( .CSV ) dos dados passados como parâmetro de uma tabela ou arquivo temporário.
//***********************************// // Função de geração de Plainha CSV // Analista : Raul Capeleti //***********************************// dbSelectArea("TEMP1") // arquivo temporario de exemplo TEMP1->( dbGoTop() ) // Chamada da função para geração co Arq. CSV If ApMsgYesNO('Gerar Planilha em Excel agora ?') MsAguarde({||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"}) // COLUNA DE CONTROLE DO ENCHOICE ( DELETADO OU NÃO ) // Este último campo é o marcador de registro deletado, se não for criado a última coluna será utilizada para tal e perdida na planilha gerada... // Chamada da função de conversão para a planilha MsAguarde({||GeraCSV(_cAlias,,aHeader)},"Aguarde","Gerando 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 := MsfCreate(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) CpyS2T( cDirDocs+""+cArquivo+".CSV" , cPath, .T. ) If ! ApOleClient( 'MsExcel' ) MsgAlert( 'MsExcel nao instalado') Return EndIf oExcelApp := MsExcel():New() oExcelApp:WorkBooks:Open( cPath+cArquivo+".CSV" ) // Abre uma planilha oExcelApp:SetVisible(.T.) Else MsgAlert("Falha na criação do arquivo") Endif (_cAlias)->(dbclearfil()) Return