Archivos .csv

Archivos .csv

Postby horacio » Wed Jul 23, 2014 1:23 pm

Estoy utilizando la clase TExcelScript para crear un archivo .csv, el problema que se me presenta es que al crearlo me genera un archivo .xls y para guardarlo como .csv tengo que usar el método :SaveAs() que me pregunta si deseo guardarlo. Necestaria que este procedimiento sea totalmente silencioso. Hay alguna clase o función para crear este tipo de archivos directamente ? Gracias

Saludos
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Archivos .csv

Postby karinha » Wed Jul 23, 2014 6:09 pm

Mira se ayuda:

http://www.pctoledo.com.br/forum/viewto ... =13&t=3223

http://www.pctoledo.com.br/forum/viewto ... =1&t=13416

http://comp.lang.xharbour.narkive.com/p ... umentation

Code: Select all  Expand view

#define xlCSV 6

FUNCTION MAIN()

    LOCAL oExcel := CREATEOBJECT( "Excel.Application" )

    LOCAL oSheet

    oExcel:WorkBooks:Add()

    oSheet = oExcel:ActiveSheet

    oSheet:Cells( 1, 1 ):Value = "This is a test 1"
    oSheet:Cells( 1, 2 ):Value = "This is a test 2"
    oSheet:Cells( 1, 3 ):Value = "This is a test 3"

    oExcel:ActiveWorkBook:SaveAs( "C:\XHARBOUR\SAVED.CSV", xlCSV )

    oExcel:ActiveWorkBook:Close( 0 )

    oExcel:Quit()

    RETURN NIL
 
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7664
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Archivos .csv

Postby karinha » Wed Jul 23, 2014 6:10 pm

ó crea algo asi:

Code: Select all  Expand view

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
 


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7664
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Archivos .csv

Postby horacio » Wed Jul 23, 2014 6:31 pm

Muchísimas gracias Karinha, probaré y te cuento.

Saludos
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 115 guests

cron