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.
De Excel a DBF
-
- Posts: 47
- Joined: Wed Oct 12, 2005 6:58 pm
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.
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.
-
- Posts: 47
- Joined: Wed Oct 12, 2005 6:58 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
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
-
- Posts: 47
- Joined: Wed Oct 12, 2005 6:58 pm
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.
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.