Acceder a Excel sin tener Excel instalado...

Acceder a Excel sin tener Excel instalado...

Postby xmanuel » Fri Apr 10, 2020 5:47 pm

Hace un par de días mi gran amigo Félix me hizo esa pregunta...
Mi respuesta fue: Con HDO claro, lo voy a probar.
Y efectivamente se puede acceder a Excel con HDO sin tener el Excel instalado.
Un fichero XLS es una base de datos y cada hoja una tabla.

:D
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Acceder a Excel sin tener Excel instalado...

Postby cnavarro » Fri Apr 10, 2020 5:59 pm

Muy bien Manu
Pero si es un xlsx, al fin y al cabo es un fichero comprimido ( como si fuese un zip ) y dentro contiene todos las hojas en formatos xml, por lo que se puede acceder a ellas con las funciones que harbour nos ofrece para el uso de este tipo de ficheros.
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Acceder a Excel sin tener Excel instalado...

Postby xmanuel » Fri Apr 10, 2020 9:16 pm

Seguro.

Esta es una manera más :D

HDO soporta *.xls, *.xlsx, *.xlsm, *.xlsb que es lo que soporta el ODBC de MS para su drive.
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Acceder a Excel sin tener Excel instalado...

Postby joseluispalma » Sat Apr 11, 2020 7:15 am

¿Tiene ya el RDD acabado?
joseluispalma
 
Posts: 109
Joined: Mon Apr 30, 2012 9:10 am

Re: Acceder a Excel sin tener Excel instalado...

Postby xmanuel » Sat Apr 11, 2020 3:03 pm

La RDD esta al 78 %
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Acceder a Excel sin tener Excel instalado...

Postby joseluispalma » Sat Apr 11, 2020 3:44 pm

Nosotros usamos con éxito desde hace más de 10 años TDolphin.

Pero el RDD sería estupendo para poder rescatar algunos programas que usan ADS, pero que no compensa reescribirlos con TDolphin o tu clase.

A ver si te animas a completarlo.
joseluispalma
 
Posts: 109
Joined: Mon Apr 30, 2012 9:10 am

Re: Acceder a Excel sin tener Excel instalado...

Postby xmanuel » Sun Apr 12, 2020 1:53 pm

Ejemplo de como recorrer una hoja de cálculos rescatando los valores.
En este caso tiene dos columnas con nombres de ficheros, la primera el actual y la segunda al que hay que renombrar.

Code: Select all  Expand view  RUN

//------------------------------------------------------------------------------

#include "hdo.ch"

REQUEST RDLODBCN

//------------------------------------------------------------------------------
// Programa principal

procedure main

    local oApp

    oApp := TApp():new( "Cambio nombres.xlsx", "Hoja1" )

    oApp:run()
    oApp:end()

return

//------------------------------------------------------------------------------
// Clase aplicacion

CLASS TApp

    DATA oXLS
    DATA oSheet

    METHOD new( cXLS, cSheet ) CONSTRUCTOR
    METHOD run()
    METHOD end()
    METHOD imprime( cTxt )

ENDCLASS

//------------------------------------------------------------------------------
// Constructor de la clase

METHOD new( cXLS, cSheet ) CLASS TApp

    local e

    if ValType( cXLS ) == 'C' .and. File( cXLS )
        cXLS := AllTrim( cXLS )
        // Creamos el objeto XLS
        ::oXLS := THDO():new( "odbcn" )
        // Uso de try catch
        try
            // Intenta crear los objetos XLS y hoja
            ::oXLS:connect( "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=./" + cXLS + ";" )
            ::oSheet := ::oXLS:query( "SELECT * FROM " + "[" + AllTrim( cSheet ) + "$]" )
        catch e
            // Gestion del error aqui uso el estandar de harbour
            eval( errorBlock(), e )
            // Cierre automatico en caso de error
            ::end()
        end
    else
        msg( "No se ha pasado un fichero excel" )
    endif

return Self

//------------------------------------------------------------------------------
// Corre la aplicacion. Proceso principal

PROCEDURE run() CLASS TApp

    local cOldFile, cNewFile, cResult

    if ValType( ::oSheet ) == 'O'
        while ::oSheet:fetchDirect()
            cOldFile := ::oSheet:fetchColumn( 1 )
            cNewFile := ::oSheet:fetchColumn( 2 )
            cResult :=  "Renombrando: " + cOldFile + " -> " + cNewFile + " ### "
            if File( cOldFile )
                cResult += IF( FRename( cOldFile, cNewFile ) == 0, "OK", "ERROR: No se pudo renombrar" )
            else
                cResult += "ERROR: Fichero no encontrado"
            endif
            ::imprime( cResult )
        end
    endif

    ::imprime( Replicate( "-", MaxCol() ) )
    ::imprime( "Preceso terminado" )
    espera()

return

//------------------------------------------------------------------------------
// Imprime en pantalla algo
// Adaptalo para FWH o  escribe un fichero log para saber como ha ido el tema

PROCEDURE imprime( cTxt ) CLASS TApp

    ? cTxt

return

//------------------------------------------------------------------------------
// Libera recursos

PROCEDURE end() CLASS TApp

    //libera los objetos en orden inverso a su creacion

    if ValType( ::oSheet ) == 'O'
        ::oSheet:free()
    endif

    if ValType( ::oXLS ) == 'O'
        ::oXLS:free()
    endif

return

//------------------------------------------------------------------------------

 
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Acceder a Excel sin tener Excel instalado...

Postby xmanuel » Sun Apr 12, 2020 1:58 pm

José Luis me encantaría que pudieras usar HDO.
Podrías hacer comparativas.
Por otro lado, con HDO tendrías la posibilidad de usar cualquier gestor de bases de datos prácticamente sin cambiar tu PRG.
Además de la seguridad, velocidad con las sentencias preparadas en el lado del servidor tendrías la posibilidad no sólo de usar MySQL.
También tendrías a tu disposición SQLite, SQLServer, Postgres, etc ese es gran matiz que diferencia a HDO de Eagle1 o TDolphin por ejemplo...
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Acceder a Excel sin tener Excel instalado...

Postby joseluispalma » Sun Apr 12, 2020 2:35 pm

Muchas gracias Manuel. Te agradezco el ofrecimiento, pero no le veo ninguna utilidad. Como prueba de concepto, es interesante lo que has desarrollado, pero al cliente no le interesa elegir entre MySQL, SQLite o Postgres. Hipotéticamente sí con MSQServer de Microsoft, pero en Azure también soportan MySQL. Al cliente le interesan nuevas opciones en el producto, y nota mucho los cambios estéticos.

Y hoy en día, con el hardware disponible, los eventuales segundos de rapidez frente a TDolphin son insignificantes. La clase de Daniel es muy estable, tiene todo su código fuente disponible y es usada por miles de usuarios en todo el mundo. Ese ahorro no justifica comercialmente para nada lo que supone invertir horas en modificar el código y testear un producto usado por un grupo reducido de usuarios.

En cambio, como te decía, si completaras el SQLRDD sería interesante para rescatar las aplicaciones que tenemos bajo ADS, e incluso las que tienen otros colegas en el foro en dbf pero que no les compensa la inversión de cambios en el código fuente.
joseluispalma
 
Posts: 109
Joined: Mon Apr 30, 2012 9:10 am


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 38 guests