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