Page 1 of 1

Errores OLE en TEXCELSCRIPT

PostPosted: Thu Feb 24, 2022 12:51 pm
by puenteda
Buenos dias, tengo todavia varios sistemas con xharbour y fwh1601. A alquien mas le pasa que con las nuevas versiones de office según en que pc se corra el sistema en algunas funciona sin problemas la generacion de archivos excel con texcelscrip y en otras da errores tales como:

Error description: Error 13083268:CELLS/1 Unknown error: FONT
Called from: => TOLEAUTO:FONT( 0 )
Args:
Called from: .\prg\texcels.PRG => TEXCELSCRIPT:SAY( 488 )

Error description: Error 13370740/1 Unknown error: COLUMNS
Args:
[ 1] = N 2
Called from: => TOLEAUTO:COLUMNS( 0 )
Called from: .\prg\texcels.PRG => (b)TEXCELSCRIPT:TEXCELSCRIPT( 173 )

Y varios mas, todos en alguna funcion toleauto: y casi siempre en el texcelscript:say(). Es frustrante y casi siempre tengo que terminar cambiando la exportacion a excel por filexls.

Uso FWHX 16.01 y xHarbour 1.2.3 Intl. bcc7 y un texcels.prg con estos datos en el encabezado:

/*
* 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]
*
* Modificaciones y agregados realizadas por:
* Daniel Andrade - [AD2K] 26/08/2002
* Rimantas Usevicius - [RimUs] 25-09-2002
* Carlos Sincur Romero - [CSR] 4/9/2002
* El Browse es un concepto original de René Flores , adaptado a esta clase.

Saludos, y gracias por anticipado por la ayuda
Daniel Puente
Santa Cruz, Argentina

Re: Errores OLE en TEXCELSCRIPT

PostPosted: Thu Feb 24, 2022 3:46 pm
by hmpaquito
Hola,

Llevo varios años sufriendo los errores aleatorios de excel.
En general uso 3 métodos y con ello lo tengo más o menos pacificado:

1- Asignar objeto antes de usarlo. No estoy seguro de que sea eficaz

No hacer
Code: Select all  Expand view
x:= worksheets(1):Name
, sino hacer
Code: Select all  Expand view
o:= oExcel:worksheets(1)
x:= o:Name


2 - Utilizar el recolector de basura despues de grandes operaciones, que parece que corrompe bastante la memoria, al menos para excel:

Code: Select all  Expand view
hb_gcall(.t.)



3 - Usar (una funcion mejor o) bucle para reintentar las operaciones, porque la operacion excel que da error, la reintentas y al segundo, tercer o cuarto intento si funciona

Code: Select all  Expand view
lError:= .t.
FOR nFor:= 1 TO 5
   TRY
      o:= oExcel:worksheets(1)
      lError:= .f.
   END
   IF !lError
      EXIT
   ENDIF
NEXT
 

Salu2


Uso harbour y BCC 7.3

Re: Errores OLE en TEXCELSCRIPT

PostPosted: Thu Feb 24, 2022 5:02 pm
by puenteda
Hola hmpaquito, gracias por contestar, voy lucharlo un poco a ver si se puede capturar el error, pero es dificil porque por ejemplo te da:

Args:
[ 1] = C Matrícula

Stack Calls
===========
Called from: => TOLEAUTO:_VALUE( 0 )
Called from: .\prg\texcels.PRG => TEXCELSCRIPT:SAY( 510 )
Called from: .\prg\TXTDEBITO.PRG => DEBITOPADRONGENERAPLANILLAMENSUAL( 951 )

Y la linea del prg es un simple say:

oExcel:Say(3,1 ,'Matrícula','Arial',09 ,.F. , , , 7 , , , ,1)
//METHOD Say( nRow, nCol, xValue , cFont , nSize , lBold , lItalic ,lUnderLine, nAlign, nColor, nFondo , nOrien , nStyle , cFormat ) CLASS TExcelScript

Como que "explota" el ole y el error sale en cualquier parte, adentro de un do while que recorre una base. Voy a probar tambien llamar al recolector de basura, gracias.

Saludos,
Daniel

Re: Errores OLE en TEXCELSCRIPT

PostPosted: Thu Feb 24, 2022 5:21 pm
by hmpaquito
Hola,

No utilizo la clase TExcelScript, utilizo clases propias, extremadamente alambicadas con mis programas.

Ahora bien, en mis clases, conforme me fueron apareciendo esos errores, entre otros, fui haciendo métodos intermedios, para evitar tener que trastear mucho los programas dandoles, a los metodos, soporte de errores

Así si en mi clase de manejo de excel tengo un metodo :Say() le puse soporte de errores y lo dejé asi:

Code: Select all  Expand view
METHOD Say(xParametros)
Local nFor
Local lError:= .T.
Local xRet

FOR nFor:= 1 TO 5
   TRY
      xRet:= ::EnlaceSay(xParametros)
      lError:= .f.
   END
   IF !lError
       EXIT
   ENDIF
NEXT
RETURN xRet

METHOD EnlaceSay(xParametros)
--- Operaciones del :Say()
RETURN xxxxx

Re: Errores OLE en TEXCELSCRIPT

PostPosted: Thu Feb 24, 2022 5:43 pm
by puenteda
Si, gracias, me parece que va por ahi la cosa para que no explote todo, el hb_gcall(.t.) parece que tambien ayuda, aunque tarda un poco mas pero igual explota.

Saludos,
Daniel

Re: Errores OLE en TEXCELSCRIPT

PostPosted: Fri Feb 25, 2022 3:50 pm
by jbrita
deberias cambiarlo por:

local oExcel := CreateObject( "excel.application" )
local oBook := oExcel:Workbooks:Add()
local oSheet := oBook:Worksheets( 1 )

Saludos

Re: Errores OLE en TEXCELSCRIPT

PostPosted: Fri Feb 25, 2022 4:16 pm
by hmpaquito
CreateObject() depende de TOleAuto:

Code: Select all  Expand view
FUNCTION CreateObject( xOle, cLicense )
   RETURN TOleAuto():New( xOle,, cLicense )

FUNCTION GetActiveObject( cString )
   RETURN TOleAuto():GetActiveObject( cString )


Habría, si acaso, que probar con win_oleCreateObject(), pero no sabemos si los metodos son compatibles 100% con TOleAuto, aunque por el hilo de abajo, parece que si. Quizá este puede ser un buen camino a explorar y abandonar TOleAuto y ver si asi desaparecen los errores random. Para probar seria tan facil como poner:

Code: Select all  Expand view
FUNCTION CreateObject( ... )
   RETURN win_oleCreateObject( ... )
 


viewtopic.php?f=6&t=33084

Re: Errores OLE en TEXCELSCRIPT

PostPosted: Tue Mar 01, 2022 10:22 pm
by puenteda
Gracias a ambos, cambiando texcelscript por toleauto y agregandole el control de errores a sus llamadas con try y catch se logra generar planillas grandes sin que explote, definitivamente fue la solucion.

Saludos,
Daniel Puente
Santa Cruz, Argentina

Re: Errores OLE en TEXCELSCRIPT

PostPosted: Wed Mar 02, 2022 12:08 am
by puenteda
Estimados:

Ya que estamos una ultima pregunta, alguno logro poder usar los autofiltros de excel ?. Deberia ser x ej:

oSheet:Range("A3:H903"):Autofilter()

Pero no funcionan.

Saludos,
Daniel Puente

Re: Errores OLE en TEXCELSCRIPT

PostPosted: Mon May 23, 2022 8:55 pm
by Joel Andujo
Estimado, tal vez ya sea tarde, pero para que funcione el filtro
la información debe empezar en el renglón inmediato indicado en el filtro:

Ejemplo

// Renglón de los filtros
oSheet:Range("A3:Z3"):Autofilter()

La información del excel debe iniciar en el renglón 4:

espero haberte ayudado, a mi me funciona muy bien.
Joel