FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Pasar datos de Excel a DBF
Posts: 198
Joined: Fri Nov 18, 2005 07:34 PM
Pasar datos de Excel a DBF
Posted: Tue Aug 25, 2015 05:06 PM

Hola a todos, necesito pasar datos constantemente de un archivo de excel a un DBF donde se va guardando toda la informacion contenida en el archivo, es posible realizarlo ?, en algunas ocasiones es la HOJA 1 pero en ocasiones son mas.

Alguna sugerencia ??

saludos

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Pasar datos de Excel a DBF
Posted: Tue Aug 25, 2015 05:08 PM
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Pasar datos de Excel a DBF
Posted: Wed Aug 26, 2015 03:52 AM
Algo que trabaje recientemente, muchas cosas comentadas, esta como leer un libro, una hoja, una columna, una celda, etc...saludos... :shock:
#include "FiveWin.ch"

MEMVAR oDatos

PROCEDURE lee_libro()

聽 聽LOCAL nFor := 0, oExcel2, nVeces := 0 ,;
聽 聽 聽 nRowIni := 6 ,; // CONTROLADOR DE LINEAS DONDE SE GRABARA DATOS
聽 聽 聽 aArchiAngu := { "angulo0", "angulo10", "angulo20", "angulo30" ,;
聽 聽 聽 聽 聽"angulo40", "angulo50", "angulo60", "angulo70", "angulo80" ,;
聽 聽 聽 聽 聽"angulo90", "angulo100", "angulo110", "angulo120", "angulo130" ,;
聽 聽 聽 聽 聽"angulo140", "angulo150", "angulo160", "angulo170" }

聽 聽cResumen := "C:\SISTEMA TANIA\EXCEL\resumen.xlsm"

聽 聽oExcel2 := TOleAuto():New( "Excel.Application" ) // ACTIVANDO EXCEL
聽 聽oExcel2:Visible := .t. // MOSTRAR O NO HOJA DE EXCEL
聽 聽oExcel2:Workbooks:Open( cResumen ) // ABRO EL ARCHIVO

* 聽 FOR nVeces := 1 TO 2

聽 聽 聽 FOR nFor := 1 TO Len( aArchiAngu )
聽 聽 聽 聽 聽cFileXls := "C:\SISTEMA TANIA\EXCEL\" + aArchiAngu[nFor]
聽 聽 聽 聽 聽lee_angulos( cFileXls, oExcel2, nRowIni, nVeces )
聽 聽 聽 聽 聽nRowIni++ // CONTROLADOR DE LINEAS DONDE SE GRABARA DATOS
聽 聽 聽 NEXT

* 聽 NEXT

// FINALIZADO
聽 聽MsgInfo( "Finalizado.", oDatos:cTitMsg )
聽 聽oDatos:oWndPPAL:END()

RETURN

PROCEDURE lee_angulos( cFileXls, oExcel2, nRowIni, nVeces )

聽 聽LOCAL oExcel, oHoja, nRows, nCols, nCol, nRow ,;
聽 聽 聽 nPiso := 0, nColum := 0 ,;
聽 聽 聽 cPiso := "PISO" ,;
聽 聽 聽 aAngulo := {} // contiene por cada columna(col.B) el valor de V(col.C) y el angulo de respuesta(col.E)

聽 聽oExcel := TOleAuto():New( "Excel.Application" ) // ACTIVANDO EXCEL
聽 聽oExcel:Visible := .t. // MOSTRAR O NO HOJA DE EXCEL
聽 聽oExcel:Workbooks:Open( cFileXls ) // ABRO EL ARCHIVO DE ANGULOS...

聽 聽FOR nPiso := 1 TO 10 // LEYENDO LOS PISOS DEL 1 AL 10

聽 聽 聽 ASize( aAngulo, 0 ) // BLANQUEANDO DATOS LEIDOS

聽 聽 聽 cPiso := "PISO"
聽 聽 聽 cPiso := cPiso + cValToChar(nPiso)

聽 聽 聽 oExcel:Sheets(cPiso):Select() // SELECCIONO Y ME CAMBIO A LA HOJA Q VOY A LEER(pisos)
聽 聽 聽 oHoja := oExcel:ActiveSheet() // ACTIVO HOJA SELECCIONADA, SINO ESPECIFICAS QUE HOJA, TOMARA POR DEFECTO LA HOJA1
聽 聽 聽 oHoja:Cells(2, 2):Select() // POSICIONA EL CURSO EN LA CELDA ESPECIFICADA PARA LEER COLUMNA( row, col / fila, col)

聽 聽 聽 nRows := oHoja:UsedRange:Rows:Count() // CANTIDAD LINEAS USADAS INCLUYENDO LA LINEA 1 QUE ES LA CABECERA
* 聽 聽 聽nCols := oHoja:UsedRange:Columns:Count() // CANTIDAD COLUMNAS USADAS

聽 聽 聽 FOR nColum := 2 TO nRows STEP 3 // LEO VALORES DE LAS COLUMNAS 1 HASTA LA 121(nRows)
聽 聽 聽 聽 聽oHoja:Cells(nColum, 5):NumberFormat := "@" // FORMATO TEXTO(general)
聽 聽* 聽 聽 聽oHoja:Cells(nColum, 2):Value // COLUMNAS
聽 聽* 聽 聽 聽oHoja:Cells(nColum, 3):Value // V
聽 聽* 聽 聽 聽oHoja:Cells(nColum, 4):Value // ANGULO APLICADO
聽 聽* 聽 聽 聽oHoja:Cells(nColum, 5):Value // ANGULOS DE RESPUESTA

* 聽 聽 聽 聽 AAdd( aAngulo, { oHoja:Cells(nColum, 3) ,;//Round( oHoja:Cells(nColum, 3):Value, 2 ) ,; // REDONDEO VALOR DE 'V' A 2 DECIMALES
聽 聽 聽 聽 聽AAdd( aAngulo, { oHoja:Cells(nColum, 3) ,;//Round( oHoja:Cells(nColum, 3):Value, 2 ) ,; // REDONDEO VALOR DE 'V' A 2 DECIMALES
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oHoja:Cells(nColum, 5):Value ,; // ANGULO DE RESPUESTA
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oHoja:Cells(nColum, 2):Value } ) // NUMERO COLUMNA(1-121)
聽 聽 聽 NEXT

聽 聽 聽 graba_resumen( oExcel2, cPiso, aAngulo, nRowIni, cFileXls ) // GRABO EN LIBRO RESUMEN

聽 聽NEXT

// CERRANDO EXCEL
聽 聽oExcel:Get("ActiveWorkBook"):Save() // SALVA LIBRO ACTIVO
聽 聽oExcel:WorkBooks:Close() // CIERRA LIBRO ACTIVO
聽 聽oExcel:Quit() // CIERRA EXCEL

RETURN

PROCEDURE graba_resumen( oExcel2, cPiso, aAngulo, nRowIni )

聽 聽LOCAL nColIni := 3, nFor := 0, oHoja2

聽 聽LOCAL cMensaje := "Libro: " + cFileXls + " - Piso: " + cPiso

聽 聽msgwait("Procesando: " + cMensaje, "Espere", 1)

// ESPECIFICAS EN QUE HOJA QUIERES QUE SE INICIE Y TRABAJE, SE SELECCIONA Y LUEGO ACTIVA
聽 聽oExcel2:Sheets(cPiso):Select() // SELECCIONO EN QUE HOJA VOY A GRABAR
聽 聽oHoja2 := oExcel2:ActiveSheet() // SINO ESPECIFICAS QUE HOJA, TOMARA POR DEFECTO LA HOJA1

聽 聽oHoja2:Cells(nRowIni, nColIni):Select() // POSICIONA EL CURSO EN LA CELDA ESPECIFICADA( row, col / fila, col)

聽 聽FOR nFor := 1 TO Len( aAngulo )
聽 聽 聽 oHoja2:Cells( nRowIni, nColIni ):Value := aAngulo[nFor, 1] // CORTANTE
聽 聽 聽 nColIni++
聽 聽 聽 oHoja2:Cells( nRowIni, nColIni ):Value := aAngulo[nFor, 2] // ANGULO DE RESPUESTA
聽 聽 聽 nColIni++
聽 聽NEXT

RETURN




















/*
PROCEDURE ejecutados_excel( oQry, aVar )

聽 聽LOCAL oExcel, oHoja, nRow := 2, nCol := 1, nFor := 0

聽 聽IF oQry:RecCount() == 0
聽 聽 聽 MSGALERT( "No hay Registros en este Periodo de Fechas: " +;
聽 聽 聽 聽 聽DToC( aVar[1] ) + " al " + DToC( aVar[2] ), oDatos:cTitMsg )

聽 聽 聽 RETURN
聽 聽ENDIF

聽 聽oExcel := TOleAuto():New( "Excel.Application" )
聽 聽oExcel:WorkBooks:Add() // AGREGA UNA HOJA A UN LIBRO

// ESPECIFICAS EN QUE HOJA QUIERES QUE SE INICIE Y TRABAJE, SE SELECCIONA Y LUEGO ACTIVA
*** oExcel:Sheets("Hoja2"):Select(); oHoja := oExcel:ActiveSheet()

聽 聽oHoja := oExcel:ActiveSheet() // SINO ESPECIFICAS QUE HOJA, TOMARA POR DEFECTO AL HOJA1

聽 聽oHoja:Cells(1, 1):Value := "Llamada"
聽 聽oHoja:Cells(1, 2):Value := "Serial"
聽 聽oHoja:Cells(1, 3):Value := "Fecha de atenci贸n"
聽 聽oHoja:Cells(1, 4):Value := "Tiempo de Viaje"
聽 聽oHoja:Cells(1, 5):Value := "Inicio del trabajo"
聽 聽oHoja:Cells(1, 6):Value := "Fin del trabajo"
聽 聽oHoja:Cells(1, 7):Value := "Reporte - Comentario"

聽 聽oQry:GOTOP()
聽 聽DO WHILE !oQry:EOF()
聽 聽 聽 oHoja:Cells(nRow, 1):Value := AllTrim( cValToChar( oQry:rep_num_llamada ) )
聽 聽 聽 oHoja:Cells(nRow, 2):Value := AllTrim( oQry:rep_num_serial )
聽 聽 聽 oHoja:Cells(nRow, 3):Value := oQry:rep_fch_servicio
//
聽 聽 聽 oHoja:Cells(nRow, 4):Value := SUBST( oQry:rep_tiempo_viaje_inicio, 1, 5 )
聽 聽 聽 oHoja:Cells(nRow, 5):Value := SUBST( oQry:rep_tiempo_rep_inicio, 1, 5 )
聽 聽 聽 oHoja:Cells(nRow, 6):Value := SUBST( oQry:rep_tiempo_rep_fin, 1, 5 )
//
聽 聽 聽 oHoja:Cells(nRow, 7):Value := AllTrim( cValToChar( oQry:rep_num_reporte ) ) + " " +;
聽 聽 聽 聽 聽AllTrim( oQry:rep_observa1 ) + AllTrim( oQry:rep_observa2 ) +;
聽 聽 聽 聽 聽AllTrim( oQry:rep_observa3 ) + AllTrim( oQry:rep_observa4 ) +;
聽 聽 聽 聽 聽AllTrim( oQry:rep_observa5 ) + AllTrim( oQry:rep_observa6 )

聽 聽 聽 oQry:SKIP()

聽 聽 聽 nRow++
聽 聽ENDDO

// DESPUES DE CARGADO LOS DATOS A EXCEL, ES QUE SE HACEN LOS AJUSTES
聽 聽FOR nFor := 1 TO 7
聽 聽 聽 oHoja:Cells(1, nFor):Font:Bold := .t. // COLOCA TEXTO DE UNA CELDA EN NEGRITA
聽 聽 聽 oHoja:Cells(1, nFor):Interior:Color := RGB(192,192,192) // COLOR FONDO DE LA CELDA(gris claro)
//
聽 聽 聽 oHoja:Columns(nFor):AutoFit() // AJUSTA LA COLUMNA A LA 聽CELDA CON EL TEXTO MAS GRANDE
聽 聽NEXT

***oHoja:Cells( 7, 1 ):FormulaLocal:="=SUMA(A1:A5)" // APLICAR FORMULA A UNA CELDA

聽 聽oHoja:Range("A1:F" + AllTrim( Str( nRow ) )):HorizontalAlignment := 7 // ALINEA(centra) QUE ESTE EN UN RANGO DE CELDAS HORIZONTALMENTE
聽 聽oHoja:Range("G1"):HorizontalAlignment := 7 // ALINEA(centra) QUE ESTE EN UN RANGO DE CELDAS HORIZONTALMENTE
//
聽 聽oHoja:Cells(1, 1):Select() // POSICIONA EL CURSO EN LA CELDA ESPECIFICADA
聽 聽oExcel:Visible := .t. // MOSTRAR O NO HOJA DE EXCEL

聽 聽** oHoja:PrintPreview() // MUESTRA PREVIEW DE LA HOJA ACTIVA
聽 聽** oHoja:SaveAs( 'c:\' + 'PRUEBA.XLS' ) // SALVAR ARCHIVO
聽 聽** oHoja:End()
聽 聽** oExcel:WorkBooks:Close() //oExcel:End()

RETURN
*/

/*
PROCEDURE excel_tabla( oMeter, oText, oDlg, lEnd, cFileXls )

聽 聽LOCAL oExcel, oBook, nRows, nCols, nCol, nRow, oError, cSql

聽 聽oExcel := TOleAuto():New( "Excel.Application" ) // ACTIVANDO EXCEL
聽 聽oExcel:Workbooks:Open( cFileXls ) // ABRO EL ARCHIVO SELECCIONADO
//
聽 聽oBook := oExcel:Get( "ActiveSheet" ) // ACTIVO HOJA EXCEL
聽 聽nRows := oBook:UsedRange:Rows:Count() // CANTIDAD LINEAS EXCEL INCLUYENDO LA LINEA 1 QUE ES LA CABECERA
聽 聽nCols := oBook:UsedRange:Columns:Count() // CANTIDAD COLUMNAS EXCEL

聽 聽oMeter:nTotal = nRows // PASO AL METER TOTAL DE LINEAS

聽 聽FOR nRow = 2 TO nRows // CARGANDO DE EXCEL TABLA REPORTES
聽 聽 聽 cSql := "INSERT INTO servicios_reportes SET "
//
聽 聽 聽 cSql += "rep_nombre_cliente='" + oBook:Cells( nRow, 1 ):Value + "', "
聽 聽 聽 cSql += "rep_num_reporte=" + ClipValue2SQL( oBook:Cells( nRow, 2 ):Value ) + ", "
聽 聽 聽 cSql += "rep_equipo_cliente=" + ClipValue2SQL( oBook:Cells( nRow, 3 ):Value ) + ", "
// ojo - esta columna esta llegando de tipo numerica
聽 聽 聽 cSql += "rep_num_serial=" + ClipValue2SQL( SUBST( cValToChar( oBook:Cells( nRow, 4 ):Value ), 1, 10 ) ) + ", " // 18/12/2014
//
聽 聽 聽 cSql += "rep_num_llamada=" + ClipValue2SQL( oBook:Cells( nRow, 5 ):Value ) + ", "
聽 聽 聽 cSql += "rep_preventivo=" + ClipValue2SQL( 1 ) + ", " // SIEMPRE ES PREVENTIVO - COL.6 DE EXCEL
//
聽 聽 聽 cSql += "rep_tiempo_viaje_inicio=" + ClipValue2SQL( SUBST( oBook:Cells( nRow, 7 ):Value, 1, 5 ) ) + ", "
聽 聽 聽 cSql += "rep_tiempo_viaje_fin=" + ClipValue2SQL( SUBST( oBook:Cells( nRow, 7 ):Value, 7, 5 ) ) + ", "
//
聽 聽 聽 cSql += "rep_tiempo_espera_inicio=" + ClipValue2SQL( SUBST( oBook:Cells( nRow, 8 ):Value, 1, 5 ) ) + ", "
聽 聽 聽 cSql += "rep_tiempo_espera_fin=" + ClipValue2SQL( SUBST( oBook:Cells( nRow, 8 ):Value, 7, 5 ) ) + ", "
//
聽 聽 聽 cSql += "rep_tiempo_rep_inicio=" + ClipValue2SQL( SUBST( oBook:Cells( nRow, 9 ):Value, 1, 5 ) ) + ", "
聽 聽 聽 cSql += "rep_tiempo_rep_fin=" + ClipValue2SQL( SUBST( oBook:Cells( nRow, 9 ):Value, 7, 5 ) ) + ", "
//
聽 聽 聽 cSql += "rep_localidad=" + ClipValue2SQL( AllTrim( oBook:Cells( nRow, 10 ):Value ) +; // COL.10 y 11
聽 聽 聽 聽 聽", " + AllTrim( oBook:Cells( nRow, 11 ):Value ) ) + ", "

聽 聽 聽 cSql += "rep_estado=" + ClipValue2SQL( AllTrim( oBook:Cells( nRow, 11 ):Value ) ) + ", " // 05/01/2015

聽 聽 聽 cSql += "rep_codi_ingeniero=" + ClipValue2SQL( oBook:Cells( nRow, 12 ):Value ) + ", "
//
聽 聽 聽 IF LEN( oBook:Cells( nRow, 13 ):Value ) <= 50 // DESDE 1-50
聽 聽 聽 聽 聽cSql += "rep_observa1=" + ClipValue2SQL( SUBST( oBook:Cells( nRow, 13 ):Value ,;
聽 聽 聽 聽 聽 聽 1, Len( oBook:Cells( nRow, 13 ):Value ) ) ) + ", "

聽 聽 聽 ELSE
聽 聽 聽 聽 聽cSql += "rep_observa1=" + ClipValue2SQL( SUBST( oBook:Cells( nRow, 13 ):Value, 1, 50 ) ) + ", "
聽 聽 聽 ENDIF

聽 聽 聽 IF LEN( oBook:Cells( nRow, 13 ):Value ) > 50 .and. LEN( oBook:Cells( nRow, 13 ):Value ) <= 110 // DESDE 51-110
聽 聽 聽 聽 聽cSql += "rep_observa2=" + ClipValue2SQL( SUBST( oBook:Cells( nRow, 13 ):Value ,;
聽 聽 聽 聽 聽 聽 51, Len( oBook:Cells( nRow, 13 ):Value ) ) ) + ", "

聽 聽 聽 ELSE // DESDE 111-170
聽 聽 聽 聽 聽cSql += "rep_observa2=" + ClipValue2SQL( SUBST( oBook:Cells( nRow, 13 ):Value, 51, 110 ) ) + ", "
聽 聽 聽 聽 聽cSql += "rep_observa3=" + ClipValue2SQL( SUBST( oBook:Cells( nRow, 13 ):Value ,;
聽 聽 聽 聽 聽 聽 111, Len( oBook:Cells( nRow, 13 ):Value ) ) ) + ", "
聽 聽 聽 ENDIF
//
聽 聽 聽 cSql += "rep_np1=" + ClipValue2SQL( IF( Len( cValToChar( oBook:Cells( nRow, 14 ):Value ) ) > 0 ,;
聽 聽 聽 聽 聽SUBST( cValToChar( oBook:Cells( nRow, 14 ):Value ), 1, 12 ), ) ) + ", "
聽 聽 聽 cSql += "rep_np2=" + ClipValue2SQL( IF( Len( cValToChar( oBook:Cells( nRow, 15 ):Value ) ) > 0 ,;
聽 聽 聽 聽 聽SUBST( cValToChar( oBook:Cells( nRow, 15 ):Value ), 1, 12 ), ) ) + ", "
//
*** COL 16 - FECHA DE IMPRESION
cSql += "rep_fch_impresion='" + oBook:Cells( nRow, 16 ):Value + "', "
*** COL 17 - TIPO DE ZONA
cSql += "rep_tipo_zona='" + oBook:Cells( nRow, 17 ):Value + "', "
*** COL 18 - SERVICIO
cSql += "rep_servicio='" + oBook:Cells( nRow, 18 ):Value + "', "
*** COL 19 - TARIFA
cSql += "rep_tarifa=" + ClipValue2SQL( oBook:Cells( nRow, 19 ):Value ) + ", "
//
聽 聽 聽 cSql += "rep_fch_emision=" + ClipValue2SQL( Date() ) + ","
// AUDITORIA
聽 聽 聽 cSql += "usuario=" + ClipValue2SQL( "00" ) + ","
聽 聽 聽 cSql += "hora=" + ClipValue2SQL( time() ) + ","
聽 聽 聽 cSql += "fchcrea=" + ClipValue2SQL( date() )

聽 聽 聽 TRY
聽 聽 聽 聽 聽oDatos:oConex:Execute( cSql )

聽 聽 聽 CATCH oError
聽 聽 聽 聽 聽MSGALERT( oError:Description + CRLF + ;
聽 聽 聽 聽 聽 聽 "Error Grabando en Tabla servicios_reportes, Sentencia" + CRLF + CRLF + ;
聽 聽 聽 聽 聽 聽 cSql, oDatos:cTitMsg )

聽 聽 聽 END

聽 聽 聽 oMeter:Set( nRow )

聽 聽NEXT

// CERRANDO EXCEL
聽 聽oExcel:WorkBooks:Close()
聽 聽oExcel:Application:Quit()
聽 聽oExcel:Quit()
聽 聽oExcel := Nil

聽 聽MsgInfo( cValToChar( nRows -1 ) + " Reportes Importados Correctamente", oDatos:cTitMsg )

RETURN
*/

/*
PROCEDURE soporte_facturas_excel( oQry, aVar )

聽 聽LOCAL oExcel, oHoja, nRow := 4, nCol := 1, nFor := 0

聽 聽IF oQry:RecCount() == 0
聽 聽 聽 MSGALERT( "No hay Registros en este Periodo de Fechas: " +;
聽 聽 聽 聽 聽DToC( aVar[1] ) + " al " + DToC( aVar[2] ), oDatos:cTitMsg )

聽 聽 聽 RETURN
聽 聽ENDIF

聽 聽oExcel := TOleAuto():New( "Excel.Application" )
聽 聽oExcel:WorkBooks:Add()

聽 聽oHoja := oExcel:ActiveSheet() // SINO ESPECIFICAS QUE HOJA, TOMARA POR DEFECTO LA HOJA1

* 聽 oHoja:Cells(1, 1):Value := "REPORTES DE INTERVENCI脫N POR SERVICIOS AL CLIENTE " +;
* 聽 聽 聽"SOPORTE FACTURA No. XXXX DE FECHA DD/MM/AAAA"
//
聽 聽oHoja:Cells(3, 1):Value := "LLAMADA"
聽 聽oHoja:Cells(3, 2):Value := "REPORTE"
聽 聽oHoja:Cells(3, 3):Value := "FECHA DE SERVICIO"
聽 聽oHoja:Cells(3, 4):Value := "CLIENTE"
聽 聽oHoja:Cells(3, 5):Value := "LOCALIDAD"
聽 聽oHoja:Cells(3, 6):Value := "TIPO ZONA"
聽 聽oHoja:Cells(3, 7):Value := "SERVICIO"
聽 聽oHoja:Cells(3, 8):Value := "ORSERVACION"
聽 聽oHoja:Cells(3, 9):Value := "TARIFA Bs."

聽 聽oQry:GOTOP()
聽 聽DO WHILE !oQry:EOF()
聽 聽 聽 oHoja:Cells(nRow, 1):Value := AllTrim( cValToChar( oQry:rep_num_llamada ) )
聽 聽 聽 oHoja:Cells(nRow, 2):Value := AllTrim( cValToChar( oQry:rep_num_reporte ) )
聽 聽 聽 oHoja:Cells(nRow, 3):Value := oQry:rep_fch_servicio
聽 聽 聽 oHoja:Cells(nRow, 4):Value := AllTrim( oQry:rep_nombre_cliente )
聽 聽 聽 oHoja:Cells(nRow, 5):Value := AllTrim( oQry:rep_localidad )
聽 聽 聽 oHoja:Cells(nRow, 6):Value := AllTrim( oQry:rep_tipo_zona )
聽 聽 聽 oHoja:Cells(nRow, 7):Value := AllTrim( oQry:rep_servicio )
聽 聽 聽 oHoja:Cells(nRow, 8):Value := "EJECUTADO"//oQry:rep_servicio
聽 聽 聽 oHoja:Cells(nRow, 9):Value := oQry:rep_tarifa
//
聽 聽 聽 oQry:SKIP()

聽 聽 聽 nRow++
聽 聽ENDDO

// DESPUES DE CARGADO LOS DATOS A EXCEL, ES QUE SE HACEN LOS AJUSTES
聽 聽FOR nFor := 1 TO 9
聽 聽 聽 oHoja:Cells(3, nFor):Font:Bold := .t. // COLOCA TEXTO DE UNA CELDA EN NEGRITA
聽 聽 聽 oHoja:Columns(nFor):AutoFit() // AJUSTA LA COLUMNA A LA 聽CELDA CON EL TEXTO MAS GRANDE
聽 聽 聽 oHoja:Cells(3, nFor):Interior:Color := RGB(192,192,192) // COLOR FONDO DE LA CELDA(gris claro)
//
聽 聽 聽 IF nFor > 3
聽 聽 聽 聽 聽oHoja:Cells(nFor, 9):NumberFormat := "#.##0,00" // FORMATEAR CELDA NUMERICA
聽 聽 聽 ENDIF
聽 聽NEXT

聽 聽oHoja:Cells(nRow, 8):Value := "Total Bs."
聽 聽oHoja:Cells(nRow, 8):Font:Bold := .t. // COLOCO EN NEGRITA TEXTO Total Bs.
聽 聽oHoja:Cells(nRow, 9):Font:Bold := .t. // COLOCO EN NEGRITA TOTAL DE LA SUMATORIA
聽 聽oHoja:Cells(nRow, 9):FormulaLocal:="=SUMA(I4:I" + cValToChar(nRow-1) + ")" // APLICAR FORMULA A UNA CELDA

聽 聽oHoja:Range("A3:H" + AllTrim( Str( nRow-1 )) ):HorizontalAlignment := 7 // ALINEA(centra) QUE ESTE EN UN RANGO DE CELDAS HORIZONTALMENTE
// COLOCO TEXTO DE CELDA 1,1 ACA ABAJO PARA QUE NO SE AJUSTE COLUMNA AL TAMA脩O DE ESTE TEXTO
聽 聽oHoja:Cells(1, 1):Value := "REPORTES DE INTERVENCI脫N POR SERVICIOS AL CLIENTE " +;
聽 聽 聽 "SOPORTE FACTURA No. XXXX DE FECHA DD/MM/AAAA"

//
聽 聽oHoja:Cells(1, 1):Select() // POSICIONA EL CURSO EN LA CELDA ESPECIFICADA
聽 聽oExcel:Visible := .t. // MOSTRAR O NO HOJA DE EXCEL

RETURN
*/

/*
PROCEDURE pendientes_ejecutar_excel( oQry, oBrw )

聽 聽LOCAL oExcel, oHoja, nRow := 2, nCol := 1, nFor := 0

聽 聽oQry:SetWhere( "rep_status = 1" ) // PENDIENTES POR EJECUTAR
聽 聽oQry:SetOrder( "orden" )
聽 聽oBrw:REFRESH()

聽 聽IF oQry:RecCount() == 0
聽 聽 聽 MSGALERT( "No hay Reportes por Ejecutar.", oDatos:cTitMsg )

聽 聽 聽 RETURN
聽 聽ENDIF

聽 聽oExcel := TOleAuto():New( "Excel.Application" )
聽 聽oExcel:WorkBooks:Add()

聽 聽oHoja := oExcel:ActiveSheet() // SINO ESPECIFICAS QUE HOJA, TOMARA POR DEFECTO LA HOJA1
//
聽 聽oHoja:Cells(1, 1):Value := "CLIENTE"
聽 聽oHoja:Cells(1, 2):Value := "LLAMADA"
聽 聽oHoja:Cells(1, 3):Value := "REPORTE"
聽 聽oHoja:Cells(1, 4):Value := "SERIAL"
聽 聽oHoja:Cells(1, 5):Value := "EQUIPO/MODELO"
聽 聽oHoja:Cells(1, 6):Value := "LOCALIDAD"
聽 聽oHoja:Cells(1, 7):Value := "ESTADO"

聽 聽oQry:GOTOP()
聽 聽DO WHILE !oQry:EOF()
聽 聽 聽 oHoja:Cells(nRow, 1):Value := AllTrim( oQry:rep_nombre_cliente )
聽 聽 聽 oHoja:Cells(nRow, 2):Value := AllTrim( cValToChar( oQry:rep_num_llamada ) )
聽 聽 聽 oHoja:Cells(nRow, 3):Value := AllTrim( cValToChar( oQry:rep_num_reporte ) )
聽 聽 聽 oHoja:Cells(nRow, 4):Value := AllTrim( oQry:rep_num_serial )
聽 聽 聽 oHoja:Cells(nRow, 5):Value := AllTrim( oQry:rep_equipo_cliente )
聽 聽 聽 oHoja:Cells(nRow, 6):Value := AllTrim( oQry:rep_localidad )
聽 聽 聽 oHoja:Cells(nRow, 7):Value := AllTrim( oQry:rep_estado )
//
聽 聽 聽 oQry:SKIP()

聽 聽 聽 nRow++
聽 聽ENDDO

// DESPUES DE CARGADO LOS DATOS A EXCEL, ES QUE SE HACEN LOS AJUSTES
聽 聽FOR nFor := 1 TO 7
聽 聽 聽 oHoja:Cells(1, nFor):Font:Bold := .t. // COLOCA TEXTO DE UNA CELDA EN NEGRITA
聽 聽 聽 oHoja:Cells(1, nFor):Font:Color := RGB(255,0,0) // COLOR DEL CONTENIDO DE LA CELDA(rojo)
聽 聽 聽 oHoja:Cells(1, nFor):Interior:Color := RGB(255,255,0) // COLOR FONDO DE LA CELDA(amarillo)
//
聽 聽 聽 oHoja:Columns(nFor):AutoFit() // AJUSTA LA COLUMNA A LA 聽CELDA CON EL TEXTO MAS GRANDE

*** oHoja:Cells(1, nFor):Borders(xlTop):LineStyle = xlNone // intentando colocar bordes

聽 聽NEXT

聽 聽oHoja:Range("A1:F" + AllTrim( Str( nRow )) ):HorizontalAlignment := 7 // ALINEA(centra) QUE ESTE EN UN RANGO DE CELDAS HORIZONTALMENTE
//
聽 聽oHoja:Cells(1, 1):Select() // POSICIONA EL CURSO EN LA CELDA ESPECIFICADA
聽 聽oExcel:Visible := .t. // MOSTRAR O NO HOJA DE EXCEL

聽 聽oQry:SETWHERE(); oQry:REFRESH()
聽 聽oBrw:GOTOP(); oBrw:REFRESH()

RETURN
*/

/* PONER BORDES A CELDAS CON FWH
A ver si estas l铆neas te ayudan, pru茅balas.

// Line styles
#define xlContinuous 1
#define xlDash -4115
#define xlDashDot 4
#define xlDashDotDot 5
#define xlDot -4118
#define xlDouble -4119
#define xlSlantDashDot 13
#define xlLineStyleNone -4142


// Border positions
#define xlEdgeLeft 7
#define xlEdgeTop 8
#define xlEdgeBottom 9
#define xlEdgeRight 10

oExcel := CreateObject( "Excel.Application" )
oExcel:WorkBooks:Add()
oAS := oExcel:ActiveSheet()
oAs:Range( "C10" ):Value := "Marco"
oAs:Range( "C10" ):Borders( xlEdgeTop ):LineStyle := xlContinuous

oHoja:Rows( 2 ):Font:Bold := .T.

oHoja:Cells( 1, 4 ):Value := AMPAarra[2][3][1][13]

oHoja:Cells( 2, 1 ):AddComment()
oHoja:Cells( 2, 1 ):Comment:Text := "la data, fechita"

oHoja:Columns( 1 ):Set( "NumberFormat", "#,##0" )

oHoja:Columns( (nContador + 1 ) ):NumberFormat := "#.##0"

oHoja:Columns( (nContador + 1 ) ):NumberFormat := Lower( Set( _SET_DATEFORMAT ) )
oHoja:Columns( (nContador + 1 ) ):HorizontalAlignment := - 4152 //xlRight
oHoja:Cells( nFound, 3 ):HorizontalAlignment := - 4108 //Centrat
oHoja:Columns( (nContador + 1 ) ):Set( "NumberFormat", "@" )

oHoja:Cells( nFound, nCol ):Borders():LineStyle := 1
oHoja:Cells( nFound, nCol ):Borders( 8 ):LineStyle := 1

oHoja:Cells( nLinea, 3 ):AddComment()
oHoja:Cells( nLinea, 3 ):Comment:Text( AllTrim(oTdbfFamili:Obsefact) )

oHoja:Columns( 1 ):ColumnWidth := 6
oHoja:Columns( 2 ):ColumnWidth := 12
oHoja:Columns( 3 ):ColumnWidth := 10.5

oHoja:Cells( nLinea + 2, 8 ):NumberFormat := "#.##0,00"

oHoja:Cells( nLinea, 4 ):Font:Italic := .T.
*/



/* PONER BORDES A LAS CELDAS PERO CON VISUAL BASIC
Range("C6:E15").Select
聽 聽 Selection.Borders(xlDiagonalDown).LineStyle = xlNone
聽 聽 Selection.Borders(xlDiagonalUp).LineStyle = xlNone
聽 聽 Selection.Borders(xlEdgeLeft).LineStyle = xlNone
聽 聽 Selection.Borders(xlEdgeTop).LineStyle = xlNone
聽 聽 With Selection.Borders(xlEdgeBottom)
聽 聽 聽 聽 .LineStyle = xlContinuous
聽 聽 聽 聽 .Weight = xlThin
聽 聽 聽 聽 .ColorIndex = xlAutomatic
聽 聽 End With
聽 聽 Selection.Borders(xlEdgeRight).LineStyle = xlNone
聽 聽 Selection.Borders(xlInsideVertical).LineStyle = xlNone
聽 聽 Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
*/





/*
* Este ejemplo muestra como crear un libro Excel utilizando datos de un control Grid, sin la interacci贸n del usuario.

聽* Ejemplo Excel n掳 1
聽* Autor: Fernando Yurisich <fernando.yurisich@gmail.com>
聽* Licenciado bajo The Code Project Open License (CPOL) 1.02
聽* Vea <http://www.codeproject.com/info/cpol10.aspx>
聽*
聽* Basado en un ejemplo de la distribuci贸n de OOHG creada
聽* por Ciro Vargas C. <cvc@oohg.org>
聽* Partes del c贸digo en la funci贸n ToExcel est谩n
聽* licenciadas bajo la licencia de OOHG.

#include 'oohg.ch'

FUNCTION Main()

聽 聽LOCAL i, aRows[ 15, 5 ]

聽 聽SET DATE BRITISH
聽 聽SET CENTURY ON
聽 聽SET NAVIGATION EXTENDED

聽 聽DEFINE WINDOW Form_1 ;
聽 聽 聽 AT 0,0 ;
聽 聽 聽 WIDTH 600 ;
聽 聽 聽 HEIGHT 480 ;
聽 聽 聽 TITLE 'Exportar Datos de un Grid a un Libro Excel' ;
聽 聽 聽 MAIN

聽 聽 聽 DEFINE STATUSBAR
聽 聽 聽 聽 聽STATUSITEM 'El Poder de OOHG !!!'
聽 聽 聽 END STATUSBAR

聽 聽 聽 FOR i := 1 TO 15
聽 聽 聽 聽 聽 aRows[ i ] := { Str(HB_RandomInt( 99 ), 2), ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 HB_RandomInt( 100 ), ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Date() + Random( HB_RandomInt() ), ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 'Refer ' + Str( HB_RandomInt( 10 ), 2 ), ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 HB_RandomInt( 10000 ) }
聽 聽 聽 NEXT i

聽 聽 聽 @ 20,20 GRID Grid_1 obj oGrid ;
聽 聽 聽 聽 聽WIDTH 520 ;
聽 聽 聽 聽 聽HEIGHT 330 ;
聽 聽 聽 聽 聽HEADERS { 'C脫DIGO', 'NUMERO', 'FECHA', 'REFERENCIA', 'IMPORTE' } ;
聽 聽 聽 聽 聽WIDTHS { 60, 80, 100, 120, 140 } ;
聽 聽 聽 聽 聽ITEMS aRows ;
聽 聽 聽 聽 聽COLUMNCONTROLS { { 'TEXTBOX', 'CHARACTER', '99' } , ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 'TEXTBOX', 'NUMERIC', '999999' } , ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 'TEXTBOX', 'DATE' }, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 'TEXTBOX', 'CHARACTER' }, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 'TEXTBOX', 'NUMERIC', ' 999,999,999.99' } } ;
聽 聽 聽 聽 聽FONT 'COURIER NEW' SIZE 10

聽 聽 聽 @ 370,20 BUTTON btn_Export ;
聽 聽 聽 聽 聽CAPTION 'Exportar a Excel' ;
聽 聽 聽 聽 聽WIDTH 140 ;
聽 聽 聽 聽 聽ACTION ToExcel( oGrid )

聽 聽 聽 ON KEY ESCAPE ACTION Form_1.Release()
聽 聽END WINDOW

聽 聽CENTER WINDOW Form_1
聽 聽ACTIVATE WINDOW Form_1

RETURN NIL

FUNCTION ToExcel( oGrid )

聽 聽LOCAL cBefore, oExcel, oSheet, nLin, nRow, nCol

聽 聽cBefore := Form_1.StatusBar.Item( 1 )
聽 聽Form_1.StatusBar.Item( 1 ) := 'Creando PRUEBA.XLS en la carpeta base ...'

#ifndef __XHARBOUR__
聽 聽IF( oExcel := win_oleCreateObject( 'Excel.Application' ) ) == NIL
聽 聽 聽 MsgStop( 'Error: Excel no est谩 disponible [' + win_oleErrorText()+ ']' )
聽 聽 聽 RETURN NIL
聽 聽ENDIF
#else
聽 聽oExcel := TOleAuto():New( 'Excel.Application' )
聽 聽IF Ole2TxtError() != 'S_OK'
聽 聽 聽 MsgStop( 'Error: Excel no est谩 disponible.' )
聽 聽 聽 RETURN NIL
聽 聽ENDIF
#endif

聽 聽oExcel:WorkBooks:Add()
聽 聽oSheet := oExcel:ActiveSheet()
聽 聽oSheet:Cells:Font:Name := 'Arial'
聽 聽oSheet:Cells:Font:Size := 10

聽 聽oSheet:Cells( 1, 1 ):Value := Upper( 'Exportado desde OOHG !!!' )
聽 聽oSheet:Cells( 1, 1 ):Font:Bold := .T.

聽 聽nLin := 4
聽 聽FOR nCol := 1 TO Len( oGrid:aHeaders )
聽 聽 聽 oSheet:Cells( nLin, nCol ):Value := Upper( oGrid:aHeaders[ nCol ] )
聽 聽 聽 oSheet:Cells( nLin, nCol ):Font:Bold := .T.
聽 聽NEXT
聽 聽nLin += 2

聽 聽FOR nRow := 1 to oGrid:ItemCount
聽 聽 聽 FOR nCol := 1 to Len( oGrid:aHeaders )
聽 聽 聽 聽 聽oSheet:Cells( nLin, nCol ):Value := oGrid:Cell( nRow, nCol )
聽 聽 聽 NEXT
聽 聽 聽 nRow ++
聽 聽 聽 nLin ++
聽 聽NEXT

聽 聽FOR nCol := 1 TO Len( oGrid:aHeaders )
聽 聽 聽 oSheet:Columns( nCol ):AutoFit()
聽 聽NEXT

聽 聽oSheet:SaveAs( HB_DirBase() + 'PRUEBA.XLS' )
聽 聽oExcel:WorkBooks:Close()
聽 聽oExcel:Quit()

聽 聽oSheet := NIL
聽 聽oExcel := NIL

聽 聽MsgInfo( HB_DirBase() + 'PRUEBA.XLS fue creado' + HB_OsNewLine() + ;
聽 聽 聽 聽 聽 聽 'y EXCEL.EXE fue descargado de la memoria.' )

聽 聽Form_1.StatusBar.Item( 1 ) := cBefore

RETURN NIL

*/


/*
*
* HBTEST.PRG
*
* Este ejemplo es para probar con Harbour en modo consola, sin FiveWin
* para Harbour.
*
* This example is done for testing with Harbour in console mode, without
* FiveWin for Harbour.
*


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


PROCEDURE MAIN()

LOCAL nOption

CLS
SetColor("W+/R")
@ 6, 25 TO 16, 55 DOUBLE
@ 8, 28 SAY "Probar OLE con..."

While .t.
@ 10, 32 PROMPT "Excel"
@ 11, 32 PROMPT "Word"
@ 12, 32 PROMPT "Internet Explorer"
@ 13, 32 PROMPT "Outlook"
@ 14, 32 PROMPT "Salir"

MENU TO nOption

IF nOption == 0
nOption := 5
ELSEIF nOption == 1
EXCEL97()
ELSEIF nOption == 2
WORD97()
ELSEIF nOption == 3
IEXPLORER()
ELSEIF nOption == 4
OUTLOOK()
ELSEIF nOption == 5
EXIT
ENDIF
End

SetColor("W/N")
CLS

RETURN

//--------------------------------------------------------------------

STATIC PROCEDURE EXCEL97()

LOCAL oExcel, oHoja

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

oExcel:WorkBooks:Add()

oHoja := oExcel:ActiveSheet()

oHoja:Cells:Font:Name := "Arial"
oHoja:Cells:Font:Size := 12

oHoja:Cells( 3, 1 ):Value := "Texto:"
oHoja:Cells( 3, 2 ):Value := "Esto es un texto"
oHoja:Cells( 4, 1 ):Value := "N?mero:"
oHoja:Cells( 4, 2 ):NumberFormat := "#.##0,00"
oHoja:Cells( 4, 2 ):Value := 1234.50
oHoja:Cells( 5, 1 ):Value := "L?gico:"
oHoja:Cells( 5, 2 ):Value := .T.
oHoja:Cells( 6, 1 ):Value := "Fecha:"
oHoja:Cells( 6, 2 ):Value := DATE()

oHoja:Columns( 1 ):Font:Bold := .T.
oHoja:Columns( 2 ):HorizontalAlignment := -4152 // xlRight

oHoja:Columns( 1 ):AutoFit()
oHoja:Columns( 2 ):AutoFit()

oHoja:Cells( 1, 1 ):Value := "OLE desde FW"
oHoja:Cells( 1, 1 ):Font:Size := 16
oHoja:Range( "A1:B1" ):HorizontalAlignment := 7

oHoja:Cells( 1, 1 ):Select()
oExcel:Visible := .T.

oHoja:End()
oExcel:End()

RETURN

//--------------------------------------------------------------------

STATIC PROCEDURE WORD97()

LOCAL oWord, oTexto

oWord:=TOleAuto():New( "Word.Application" )

oWord:Documents:Add()

oTexto := oWord:Selection()

oTexto:Text := "OLE desde FW"+CRLF
oTexto:Font:Name := "Arial"
oTexto:Font:Size := 48
oTexto:Font:Bold := .T.

oWord:Visible := .T.
oWord:WindowState := 1 // Maximizado

oTexto:End()
oWord:End()

RETURN

//--------------------------------------------------------------------

STATIC PROCEDURE IEXPLORER()

LOCAL oIE

oIE:=TOleAuto():New( "InternetExplorer.Application" )

oIE:Visible := .T.

oIE:Navigate( "http://www.fivetech.com" )

oIE:End()

RETURN

//--------------------------------------------------------------------

STATIC PROCEDURE OUTLOOK()

LOCAL oOL, oLista, oMail, i

oOL := TOleAuto():New( "Outlook.Application.9" )

IF Ole2TxtError() != "S_OK"

Alert("Outlook 2000 no est? disponible.", "Error")

ELSE

oMail := oOL:CreateItem( 0 ) // olMailItem

FOR i := 1 TO 10
oMail:Recipients:Add( "Contacto" + LTRIM( STR( i, 2 ) ) + ;
"<contacto" + LTRIM( STR( i, 2 ) ) + "@servidor.com>" )
NEXT

oLista := oOL:CreateItem( 7 ) // olDistributionListItem
oLista:DLName := "Prueba de lista de distribuci?n"
oLista:Display( .F. )
oLista:AddMembers( oMail:Recipients )
oLista:Save()
oLista:Close( 0 )

oMail:End()
oLista:End()
oOL:End()

ENDIF

RETURN
*/
Dios no est谩 muerto...



Gracias a mi Dios ante todo!

Continue the discussion