Page 1 of 1

Clase TExcelScript de Viktor

Posted: Tue Jun 19, 2007 6:44 pm
by Marcelo Via Giglio
Holas,

en lo que vengo viendo de mi problema con Excel, he bajado la clase de Viktor de las utilizadades del foro, del encabezado del PRG


* Clase TExcelScript v1.14 06-Feb-2004
*
* Esta Clase usa la Libreria Ole2 de José F. Giménez
*
* Autor: Víctor Manuel Tomas Díaz [Vikthor]

Espero que sea la ultima. Tengo los siguientes problemas, al inicial me da el error :

No está Excel Instalado en está PC

Tengo instalado el office 2003, pero igual pasa el mensaje y se puede trabajar.

No me funcionan los metodos :save() ni :saveas(), del error.log

Stack Calls
===========
Called from: win32ole.prg => TOLEAUTO:SAVE(0)
Called from: Texcels.prg => (b)TEXCELSCRIPT:TEXCELSCRIPT(132)
Called from: => TEXCELSCRIPT:SAVE(0)
Called from: test2.prg => MAIN(30)

Stack Calls
===========
Called from: win32ole.prg => TOLEAUTO:SAVEAS(0)
Called from: Texcels.prg => (b)TEXCELSCRIPT:TEXCELSCRIPT(133)
Called from: => TEXCELSCRIPT:SAVEAS(0)
Called from: test2.prg => MAIN(32)

El ejemplo es simplie

#include "FiveWin.ch"

static oExcel

FUNCTION main()
LOCAL cOrigen := cFilePath( GetModuleFileName( GetInstance() )) + "Test.xls", n,;
destino := cFilePath( GetModuleFileName( GetInstance() )) + "Test1.xls"

oExcel := TExcelScript():New()

oExcel:Open( cOrigen )

oExcel:Visualizar(.F.)

oExcel:Say( 1, 1, 10, "ARIAL", 10, .T., .T. )
oExcel:Say( 2, 1, 20, "ARIAL", 12, .T., .T. )
oExcel:Say( 3, 1, 30, "ARIAL", 14, .T., .T. )

// oExcel:Save()
oExcel:SaveAs( destino )

oExcel:End(.F.)

RETURN ( .T. )
Alguna ayuda,

saludos

Marcelo

Posted: Tue Jun 19, 2007 7:06 pm
by sysctrl2
Marcelo,

que compilador usas? xhb o Hb.

saludos.

Posted: Tue Jun 19, 2007 7:10 pm
by Marcelo Via Giglio
Hola,

utilizo xHarbour

saludos

Marcelo

Posted: Tue Jun 19, 2007 7:30 pm
by sysctrl2
Marcelo yo tuve un problema parecedio ,

hice un cambio en el metodo NEW de la class

aqui un pedazo de codigo


METHOD NEW() CLASS TExcelScript
::lExcel := .T.
#IFDEF __XHARBOUR__
TRY
//::oExcel := TOleAuto():New("Excel.Application") //funciona bien.
// getactiveOb marca error si el archivo esta abierto ..
// ::oExcel := GetActiveObject( "Excel.Application" )
::oExcel := CreateObject( "Excel.Application" ) //este funciona bien
CATCH
TRY
::oExcel := CreateObject( "Excel.Application" ) //no trabaja
CATCH
Alert( "No está Excel Instalado en está Pc." )
::lExcel := .F.
END
END
#ELSE
::oExcel := TOleAuto():New( Excel.Application ) //no trabaja
IF ::oExcel:hObj == 0
Alert( "No está Excel Instalado en está Pc." )
::lExcel := .F.
ENDIF

#ENDIF
::oClip:=TClipBoard():New()
::oClip:Clear()
::aExcelCols := {}
RETURN( Self )

saludos...

Posted: Tue Jun 19, 2007 9:03 pm
by Marcelo Via Giglio
Hola,

si, efectivamente con eso se soluciono la creacion de la clase, pero no asi, los metodos save() y saveas(), tienes idea que puede ser.

Gracias

Marcelo

Posted: Wed Jun 20, 2007 3:04 pm
by Vikthor
Si tienen abierta una sesión de Excel el método New() la detecta y la usa , adémas si usan solo Harbour , tienen que hacer algo parecido a esto :

Code: Select all

METHOD NEW()  CLASS TExcelScript
   ::lExcel  := .T.
   #IFDEF __XHARBOUR__
      TRY
        ::oExcel := GetActiveObject( "Excel.Application" )
      CATCH
         TRY
            ::oExcel := CreateObject( "Excel.Application" )
         CATCH
            Alert( "No está Excel Instalado en está Pc." )
            ::lExcel  := .F.
         END
      END
   #ELSE
     ::oExcel := TOleAuto():New( Excel.Application )
     IF ::oExcel:hObj == 0
         Alert( "No está Excel Instalado en está Pc." )
        ::lExcel := .F.
      ENDIF

   #ENDIF
   ::oClip:=TClipBoard():New()
*   ::oClip:Clear()
   ::aExcelCols := {}
RETURN( Self )
sysctrl2 wrote:Marcelo yo tuve un problema parecedio ,

hice un cambio en el metodo NEW de la class

aqui un pedazo de codigo


METHOD NEW() CLASS TExcelScript
::lExcel := .T.
#IFDEF __XHARBOUR__
TRY
//::oExcel := TOleAuto():New("Excel.Application") //funciona bien.
// getactiveOb marca error si el archivo esta abierto ..
// ::oExcel := GetActiveObject( "Excel.Application" )
::oExcel := CreateObject( "Excel.Application" ) //este funciona bien
CATCH
TRY
::oExcel := CreateObject( "Excel.Application" ) //no trabaja
CATCH
Alert( "No está Excel Instalado en está Pc." )
::lExcel := .F.
END
END
#ELSE
::oExcel := TOleAuto():New( Excel.Application ) //no trabaja
IF ::oExcel:hObj == 0
Alert( "No está Excel Instalado en está Pc." )
::lExcel := .F.
ENDIF

#ENDIF
::oClip:=TClipBoard():New()
::oClip:Clear()
::aExcelCols := {}
RETURN( Self )

saludos...