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.

tExcelScript() desde xHarbour -> a Harbour

Foro de Xailer profesional en español
Responder
Israel Solis
Mensajes: 155
Registrado: Mié Nov 03, 2004 12:42 pm
Ubicación: Cancún, México
Contactar:

tExcelScript() desde xHarbour -> a Harbour

Mensaje por Israel Solis »

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
Saludos :D

Israel
Avatar de Usuario
bingen
Mensajes: 565
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Re: tExcelScript() desde xHarbour -> a Harbour

Mensaje por bingen »

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
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Israel Solis
Mensajes: 155
Registrado: Mié Nov 03, 2004 12:42 pm
Ubicación: Cancún, México
Contactar:

Re: tExcelScript() desde xHarbour -> a Harbour

Mensaje por Israel Solis »

Bingen:

Mil gracias, como siempre haz salvado una vez mas mi cuello
Saludos :D

Israel
Responder