Colegas:
Durante años he usado la clase TExcelScript() de Vikthor para leer archivos de Excel no he tenido problemas con Xailer 2.x y xHarbour
Ahora, POR FIN, estoy migrando a Xailer 4 y Harbour y esta clase ya me marca múltiples errores, para no reinventar el hilo negro.. alguien ya ha resuelto la migración de esta clase para lectura de archivos de Excel u otra equivalente ?
GRACIAS
SALUDOS
Israel
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
tExcelScript() desde xHarbour -> a Harbour
-
- Mensajes: 155
- Registrado: Mié Nov 03, 2004 12:42 pm
- Ubicación: Cancún, México
- Contactar:
tExcelScript() desde xHarbour -> a Harbour
Saludos
Israel
Israel
Re: tExcelScript() desde xHarbour -> a Harbour
Hola Israel no hay problemas para leer archivos excel por OLE siempre y cuando tengas instalado Excel en la máquina, para eso no necesitas ninguna librería, el problema es leer o generar archivos excel sin tener el office instalado.
Aquí tienes una función para leer una excel
//*/
// FUNCION que abre un archivo Excel selecciona una página la lee y nos devuelve un array
// @author Bingen Ugaldebere
// @param cFile Archivo excel a abrir
// @param xColumnas Opcional. Número de columnas a leer si no se indica se leen todas, si se indica un nº limitado se acelera mucho el proceso.
// También se puede indicar un array {nFilas,nColumnas} para leer solo un área determinada desde la posición 1,1
// @param nHojaExcel Opcional. Nº de la hoja excel a leer por defecto la 1
// @param nFilasVacias Opcional. Al de cuantas filas consecutivas vacias se deja de leer la hoja, por defecto 20
// @param lConvertNulls Opcional. Si las celdas vacias se convierten a '' por defecto .T.
// @return aDatos Array con el contenido de la hoja leida
///
FUNCTION ReadFromExcel( cFile, xColumnas, nHojaExcel, nFilasVacias, lConvertNulls )
LOCAL oExcel, oPage
LOCAL aDatos := {}, aLinea := {}, nLine := 0, nCol := 0, lVacio := .F., nContador:=0
LOcal nFilas:=0, nColumnas:=0
DEFAULT xColumnas TO 256
DEFAULT nHojaExcel TO 1
DEFAULT nFilasVacias TO 20
DEFAULT lConvertNulls TO .T.
IF !File( cFile )
MsgStop( "No existe el documento Excel " + cFile)
RETURN {}
ENDIF
TRY
oExcel := GetActiveObject( "Excel.Application" )
CATCH
TRY
oExcel := CreateObject( "Excel.Application" )
CATCH
MsgInfo( "Excel no disponible. [" + Ole2TxtError() + "]" )
RETURN .F.
END
END
oExcel:WorkBooks:Open( cFile )
oPage := oExcel:WorkSheets( nHojaExcel )
If ValType(xColumnas)="A"
nFilas:=xColumnas[1]
nColumnas:=xColumnas[2]
Else
nColumnas:=xColumnas
Endif
WaitOn( "Leyendo datos de Hoja Excel",,"Excel" )
FOR nLine := 1 TO 65536
lVacio := .T.
aLinea := {}
FOR nCol := 1 TO nColumnas
AAdd( aLinea, IF(lConvertNulls .And. oPage:Cells( nLine, nCol ):Value=Nil,'',oPage:Cells( nLine, nCol ):Value ) )
IF lVacio .AND. !Vacio( aLinea[ Len( aLinea ) ] )
lVacio := .F.
nContador := nFilasVacias
ENDIF
NEXT
//Limite de filas si se ha requerido
If nFilas<>0 .And. nLine>nFilas
Exit
Endif
IF lVacio
nContador--
IF nContador = 0
EXIT
ENDIF
ELSE
AAdd( aDatos, aLinea )
ENDIF
NEXT
oExcel:Quit()
WaitOff()
ProcessMessages()
RETURN aDatos
Aquí tienes una función para leer una excel
//*/
// FUNCION que abre un archivo Excel selecciona una página la lee y nos devuelve un array
// @author Bingen Ugaldebere
// @param cFile Archivo excel a abrir
// @param xColumnas Opcional. Número de columnas a leer si no se indica se leen todas, si se indica un nº limitado se acelera mucho el proceso.
// También se puede indicar un array {nFilas,nColumnas} para leer solo un área determinada desde la posición 1,1
// @param nHojaExcel Opcional. Nº de la hoja excel a leer por defecto la 1
// @param nFilasVacias Opcional. Al de cuantas filas consecutivas vacias se deja de leer la hoja, por defecto 20
// @param lConvertNulls Opcional. Si las celdas vacias se convierten a '' por defecto .T.
// @return aDatos Array con el contenido de la hoja leida
///
FUNCTION ReadFromExcel( cFile, xColumnas, nHojaExcel, nFilasVacias, lConvertNulls )
LOCAL oExcel, oPage
LOCAL aDatos := {}, aLinea := {}, nLine := 0, nCol := 0, lVacio := .F., nContador:=0
LOcal nFilas:=0, nColumnas:=0
DEFAULT xColumnas TO 256
DEFAULT nHojaExcel TO 1
DEFAULT nFilasVacias TO 20
DEFAULT lConvertNulls TO .T.
IF !File( cFile )
MsgStop( "No existe el documento Excel " + cFile)
RETURN {}
ENDIF
TRY
oExcel := GetActiveObject( "Excel.Application" )
CATCH
TRY
oExcel := CreateObject( "Excel.Application" )
CATCH
MsgInfo( "Excel no disponible. [" + Ole2TxtError() + "]" )
RETURN .F.
END
END
oExcel:WorkBooks:Open( cFile )
oPage := oExcel:WorkSheets( nHojaExcel )
If ValType(xColumnas)="A"
nFilas:=xColumnas[1]
nColumnas:=xColumnas[2]
Else
nColumnas:=xColumnas
Endif
WaitOn( "Leyendo datos de Hoja Excel",,"Excel" )
FOR nLine := 1 TO 65536
lVacio := .T.
aLinea := {}
FOR nCol := 1 TO nColumnas
AAdd( aLinea, IF(lConvertNulls .And. oPage:Cells( nLine, nCol ):Value=Nil,'',oPage:Cells( nLine, nCol ):Value ) )
IF lVacio .AND. !Vacio( aLinea[ Len( aLinea ) ] )
lVacio := .F.
nContador := nFilasVacias
ENDIF
NEXT
//Limite de filas si se ha requerido
If nFilas<>0 .And. nLine>nFilas
Exit
Endif
IF lVacio
nContador--
IF nContador = 0
EXIT
ENDIF
ELSE
AAdd( aDatos, aLinea )
ENDIF
NEXT
oExcel:Quit()
WaitOff()
ProcessMessages()
RETURN aDatos
BiSoft Desarrollo de software profesional
http://www.bisoft.es
http://www.bisoft.es
-
- Mensajes: 155
- Registrado: Mié Nov 03, 2004 12:42 pm
- Ubicación: Cancún, México
- Contactar:
Re: tExcelScript() desde xHarbour -> a Harbour
Bingen:
Mil gracias, como siempre haz salvado una vez mas mi cuello
Mil gracias, como siempre haz salvado una vez mas mi cuello
Saludos
Israel
Israel