Categorias

Função para gerar Planilhas em Excel de Arquivos com Microsiga AdvPI.

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