Espero te sirva, mi skype joseluisy, saludos...
Para exportar desde un Query(mysql) a Excel
PROCEDURE query_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()
// 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:PageSetup:Orientation := 2 // 1=xlPortrai(vertical), 2=xlLandscape(horizontal)
*** oHoja:Cells:Font:Name := "Arial" // ESPECIFICA TIPO DE LETRA PARA TODA LA HOJA
*** oHoja:Cells:Font:Size := 12 // ESPECIFICA TAMANO DE LETRA PARA TODA LA HOJA
*** oHoja:Cells( 1, nFor ):Font:Size := 16 // DETERMINA TAMAÑO DE LETRA A USAR EN UNA CELDA
*** oHoja:Cells( 1, 1 ):Font:Bold := .t. // PONE EN NEGRITAS VALOR DE UNA CELDA
*** oHoja:Cells( 1, 1 ):Font:ColorIndex := 5 // COLOR PREESTABLECIDO DE EXCEL DEL CONTENIDO DE LA CELDA
*** oHoja:Cells( 3, 2 ):Font:Color := RGB(255,0,0) // COLOR DEL CONTENIDO DE LA CELDA
*** oHoja:Cells( 1, 4 ):Interior:ColorIndex := 16 // COLOR PREESTABLECIDO DE EXCEL DE LA CELDA
*** oHoja:Cells( 3, 2 ):Interior:Color := RGB(200,160,35) // COLOR DE LA CELDA
*** oHoja:Cells( 3, 1 ):NumberFormat := "$ ###,##0.00" // FORMATEAR CELDA NUMERICA
*** oHoja:Cells( 7, 1 ):FormulaLocal:="=SUMA(A1:A5)" // APLICAR FORMULA A UNA CELDA
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"
*** oHoja:Shapes:AddPicture( "C:\SISINGE\SERVICIOS\BITMAPS\firma.jpg", .f., .t., 100, 100, 80, 100 ) // AGREGA IMAGEN A EXCEL
*** oHoja:Shapes:AddPicture( "C:\SISINGE\SERVICIOS\BITMAPS\firma.jpg", .t., .t., 30, 30, 40, 60 ) // AGREGA IMAGEN A EXCEL
/*
Hoja1.Shapes.AddPicture "ruta:\Img.jpg", msoFalse, msoCTrue, Hoja1.Range("A1").Left, Hoja1.Range("A1").Top, Hoja1.Range("A1").Width, Hoja1.Range("A1").Height
esto lo que hace es colocar la imagen en la celda especifica, y la imagen toma el alto y ancho de la celda.
*/
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: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
desde Excel a una Tabla(mysql)
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=" + ClipValue2SQL( Val2Escape( oBook:Cells( nRow, 1 ):Value ) ) + ","
cSql += "rep_num_reporte=" + ClipValue2SQL( oBook:Cells( nRow, 2 ):Value ) + ","
cSql += "rep_equipo_cliente=" + ClipValue2SQL( Val2Escape( oBook:Cells( nRow, 3 ):Value ) ) + ","
cSql += "rep_num_serial=" + ClipValue2SQL( Val2Escape( SUBST( cValToChar( oBook:Cells( nRow, 4 ):Value ), 1, 10 ) ) ) + ","
cSql += "rep_num_llamada=" + ClipValue2SQL( oBook:Cells( nRow, 5 ):Value ) + ","
cSql += "rep_preventivo=" + ClipValue2SQL( 1 ) + "," // SIEMPRE ES PREVENTIVO
//
cSql += "rep_tiempo_viaje_inicio=" + ClipValue2SQL( Val2Escape( SUBST( oBook:Cells( nRow, 7 ):Value, 1, 5 ) ) ) + ","
cSql += "rep_tiempo_viaje_fin=" + ClipValue2SQL( Val2Escape( SUBST( oBook:Cells( nRow, 7 ):Value, 7, 5 ) ) ) + ","
//
cSql += "rep_tiempo_espera_inicio=" + ClipValue2SQL( Val2Escape( SUBST( oBook:Cells( nRow, 8 ):Value, 1, 5 ) ) ) + ","
cSql += "rep_tiempo_espera_fin=" + ClipValue2SQL( Val2Escape( SUBST( oBook:Cells( nRow, 8 ):Value, 7, 5 ) ) ) + ","
//
cSql += "rep_tiempo_rep_inicio=" + ClipValue2SQL( Val2Escape( SUBST( oBook:Cells( nRow, 9 ):Value, 1, 5 ) ) ) + ","
cSql += "rep_tiempo_rep_fin=" + ClipValue2SQL( Val2Escape( SUBST( oBook:Cells( nRow, 9 ):Value, 7, 5 ) ) ) + ","
//
cSql += "rep_localidad=" + ClipValue2SQL( Val2Escape( AllTrim( oBook:Cells( nRow, 10 ):Value ) +;
", " + AllTrim( oBook:Cells( nRow, 11 ):Value ) ) ) + ","
cSql += "rep_codi_ingeniero=" + ClipValue2SQL( Val2Escape( oBook:Cells( nRow, 12 ):Value ) ) + ","
//
IF LEN( oBook:Cells( nRow, 13 ):Value ) <= 50 // DESDE 1-50
cSql += "rep_observa1=" + ClipValue2SQL( Val2Escape( SUBST( oBook:Cells( nRow, 13 ):Value, 1, Len( oBook:Cells( nRow, 13 ):Value ) ) ) ) + ","
ELSE
cSql += "rep_observa1=" + ClipValue2SQL( Val2Escape( 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( Val2Escape( SUBST( oBook:Cells( nRow, 13 ):Value, 51, Len( oBook:Cells( nRow, 13 ):Value ) ) ) ) + ","
ELSE // DESDE 111-170
cSql += "rep_observa2=" + ClipValue2SQL( Val2Escape( SUBST( oBook:Cells( nRow, 13 ):Value, 51, 110 ) ) ) + ","
cSql += "rep_observa3=" + ClipValue2SQL( Val2Escape( SUBST( oBook:Cells( nRow, 13 ):Value, 111, Len( oBook:Cells( nRow, 13 ):Value ) ) ) ) + ","
ENDIF
//
cSql += "rep_np1=" + ClipValue2SQL( Val2Escape( SUBST( cValToChar( oBook:Cells( nRow, 14 ):Value ), 1, 12 ) ) ) + ","
cSql += "rep_np2=" + ClipValue2SQL( Val2Escape( SUBST( cValToChar( oBook:Cells( nRow, 15 ):Value ), 1, 12 ) ) ) + ","
//
cSql += "rep_fch_emision=" + ClipValue2SQL( Date() ) + ","
// AUDITORIA
cSql += "usuario=" + ClipValue2SQL( Val2Escape( "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
Dios no está muerto...
Gracias a mi Dios ante todo!