De Excel a DBF

De Excel a DBF

Postby Julio Cepeda » Wed Oct 11, 2006 7:25 pm

He bajado un ejemplo que hay por aquí por el foro para leer un archivo "XLS" y meterlo en una dbf.

Utilizo harbour con borland (BCC55)

Al compilar me da el siguiente error:
Error: Unresolved external '_HB_FUN_TOLEAUTO' referenced from C:\HARBPROG\_OTROS\EXCELDBF\EXCELDBF.OBJ

¿ Algún alma caritativa sabe si falta alguna librería ? Y abusando de vuestra amabilidad ¿ Dónde está dicha librería ?

Muchas gracias a todos y un cordial saludo.
User avatar
Julio Cepeda
 
Posts: 65
Joined: Wed Oct 12, 2005 6:58 pm

Postby R.F. » Wed Oct 11, 2006 8:48 pm

La clase TOLEAUTO esta includa en xHarbour, mas no asi en Harbour, deberas incluir el archivo correspondiente (OLEAUTOMAT.LIB) para poder utilizar el ejemplo
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby Julio Cepeda » Thu Oct 12, 2006 8:23 am

Muchas gracias Rene, no encuentro en ningún sitio la librería esa que me dices OLEAUTOMAT.LIB, pero lo he compilado con xHarbour y me da el siguiente error:

Error description: Error TOleAuto/-1 CO_E_CLASSSTRING: TOLEAUTO:NEW
Args:
[ 1] = C Excel.Application

Stack Calls
===========
Called from: => THROW(0)
Called from: win32ole.prg => TOLEAUTO:NEW(319)
Called from: ExcelDbf.prg => MAIN(7)

el código es el mismo que publicas tu en otro post:
#include "FiveWin.ch"

Function Main()

LOCAL oExcel, oHoja, nRows, nCols
LOCAL TCampos:={}, nRow, nCol

oExcel := TOleAuto():New( "Excel.Application" )

oExcel:Visible := .T. // por si quieres ver la hoja abierta

oExcel:WorkBooks:Open(cGetFile("*.XLS", "Seleccione Fichero"))

oHoja := oExcel:Get( "ActiveSheet" )

nRows := oHoja:UsedRange:Rows:Count()
nCols := oHoja:UsedRange:Columns:Count()
/*
USE <tu dbf>

FOR nRow := 2 TO nRows
APPEND BLANK
FOR nCol := 1 TO nCols
xValue := oHoja:Cells(nRow,nCol):Value
FieldPut(nCol,xValue)
SysRefresh()
NEXT
DBCOMMIT()
Memory(-1)
NEXT
*/
oExcel:Quit()
oHoja:End()
oExcel:End()

Return NIL

Supongo que estaré haciendo algo mal pero no se el qué.

Si esto llega a funcionar con xHarbour haré un ejecutable aparte que llamaré desde mi aplicaión compilada con harbour.

Muchas gracias de nuevo y un saludo.
User avatar
Julio Cepeda
 
Posts: 65
Joined: Wed Oct 12, 2005 6:58 pm

Postby R.F. » Thu Oct 12, 2006 4:30 pm

Ese ejemplo precisamente lo hice yo, y me funciona estupendamente.

Necesitaria saber, que version de xHB estas usando y si tienes Excel debidamente instalado en el equipo donde estas probando el ejemplo.
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby Julio Cepeda » Thu Oct 12, 2006 4:40 pm

Gracias Rene, vas a tener razón en lo del excel, pues yo no lo tengo instalado, sino que tengo un excel del Office 97 que lo copio al disco con sus dll's y no lo instalo.

A lo mejor no se registra correctamente.

En cuanto a la versión de xHarbour la he bajado esta mañana de la página de fivetech en la pagina que se entra con el password que me dio Silvia cundo adquirí la versión de FWH 2.8 hace unos días.

Porbaré con un Excel bien instalado.

Gracias y un saludo
User avatar
Julio Cepeda
 
Posts: 65
Joined: Wed Oct 12, 2005 6:58 pm

Postby Julio Cepeda » Fri Oct 13, 2006 8:59 am

Efectivamente Rene no funcionaba porque no tenía el Excel instalado, pues ahora funciona perfectamente.

Lo único es que me daba un error al terminar por cerrar la hoja:

oHoja:End()
oHoja:Quit()

Me lo daba con los dos métodos, Quit y End pero se lo he comentado y funciona perfectamente.

Te lo agradezco mucho porque tengo 3 aplicaciones que se lo mandan en Excel y yo lo que hacía era guardarlo desde Excel como archivo DBF y despues desde este importarlo al mío, y era un rollo.

Al final el que me funciona bien es este:

#include "FiveWin.ch"


#define NL Chr( 10 ) + Chr( 13 )


Function MAin()

LOCAL oExcel, oHoja, nRows, nCols
LOCAL aCampos:={}, nRow, nCol
LOCAL cTexto := Space( 0 ), xValue

oExcel := TOleAuto():New( "Excel.Application" )

oExcel:Visible := .T. // por si quieres ver la hoja abierta

oExcel:WorkBooks:Open( cGetFile32("*.XLS", "Seleccione Fichero") )

oHoja := oExcel:Get( "ActiveSheet" )

nRows := oHoja:UsedRange:Rows:Count()
nCols := oHoja:UsedRange:Columns:Count()
/*
USE <tu dbf>

FOR nRow := 2 TO nRows
APPEND BLANK
FOR nCol := 1 TO nCols
xValue := oHoja:Cells(nRow,nCol):Value
FieldPut(nCol,xValue)
SysRefresh()
NEXT
DBCOMMIT()
Memory(-1)
NEXT
*/
FOR nRow := 2 TO nRows
cTexto := Space( 0 )
FOR nCol := 1 TO nCols
xValue := oHoja:Cells(nRow,nCol):Value
// MsgInfo( ValType( xValue ) )
cTexto += xValue + NL
// SysRefresh()
NEXT
MsgInfo( cTexto )
NEXT

Memory(-1)
// oHoja:End()
// oHoja:Quit()
oExcel:Quit()
// oExcel:End()


Return NIL

Muchisimas gracias de nuevo y quedo a tu disposición para lo que gustes.

Un saludo.
User avatar
Julio Cepeda
 
Posts: 65
Joined: Wed Oct 12, 2005 6:58 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 43 guests