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
*/