tmpsheet = GetObject('','excel.sheet')
XLApp = tmpsheet.application
XLApp.Visible = .f.
XLApp.WorkBooks.Add()
XLSheet = XLApp.ActiveSheet
XLSheet.Cells(1,1).Value = PRODUCT_LOC
XLSheet.Cells(1,2).Value = SALESJAN_LOC
XLSheet.Cells(1,3).Value = SALESFEB_LOC
XLSheet.Cells(1,4).Value = SALESMAR_LOC
XLSheet.Cells(1,5).Value = TREND_LOC
LOCAL nPosicion, nAnterior, nActual, nRetornar, cColumn, cValor, nActCol, nAntCol, nVeces, ndd
STORE 0 TO nPosicion, nAnterior, nActual, nRetornar, nActCol, nAntCol, nVeces, ndd
*WAIT WINDOW TRENDDATA_LOC TIMEOUT 2
*/Ponemos el titulo del listado enviado al excel centrado
nCentro=ROUND(nColumnCount/2,0)
nCentro=IIF(ncentro>0,ncentro,1)
XLSheet.Cells(1,ncentro).Value =thisform.oform.caption
XLSheet.Cells(1,ncentro).font.bold =.t.
XLSheet.Cells(1,ncentro).font.size =18
*/ ahora ponemos los titulos en las columnas y el ancho
nveces=1
ncuentaletras=1
cletranterior=[]
nletranterior=1
thisform.label1.Caption=[Asignando títulos de columnas]
FOR rmn=1 TO nColumncount
cColumna=cletranterior+CHR(ncuentaletras+64)+":"+cletranterior+CHR(ncuentaletras+64)
ncuentaletras=ncuentaletras+1
IF ncuentaletras=24
cletranterior=CHR(64+nletranterior)
nletranterior=nletranterior+1
ncuentaletras=1
ENDIF
*/vemos el tipo de celda para ponerlo como fecha
cTipodato=aStruct[rmn,2]
columnafecha=.f.
IF !EMPTY(cTipoDato)
eValor=&ctipodato
IF TYPE("evalor")="D"
columnafecha=.t.
ENDIF
ENDIF
XLSheet.Cells(2+nveces,rmn).Value =aStruct[rmn,1]
XLSheet.Cells(2+nveces,rmn).font.bold =.t.
XLSheet.Cells(2+nveces,rmn).interior.colorIndex=36
XLSheet.Cells(2+nveces,rmn).interior.pattern=1
XLSheet.Columns(cColumna).ColumnWidth = aStruct[rmn,7]/6.3
IF columnafecha
XLSheet.Columns(cColumna).numberformat="m/d/yyyy"
ENDIF
oSelection=XLSheet.Cells(2+nveces,rmn)
*Pondremos bordes a las celdas
oSelection.Borders(5).LineStyle = -4142
oSelection.Borders(6).LineStyle = -4142
With oSelection.Borders(7)
.LineStyle = 1
.Weight = 2
.ColorIndex = -4105
EndWith
With oSelection.Borders(8)
.LineStyle = 1
.Weight = 2
.ColorIndex = -4105
EndWith
With oSelection.Borders(9)
.LineStyle = 1
.Weight = 2
.ColorIndex = -4105
EndWith
With oSelection.Borders(10)
.LineStyle = 1
.Weight = 2
.ColorIndex = -4105
EndWith
ENDFOR
loExcel.application.rows(1).font.bold=.t.
loExcel.application.rows(1).font.color=rgb(128,0,128)
loExcel.application.rows(2).font.bold=.t.
loExcel.application.rows(2).font.color=rgb(128,0,128)
*
El código para combinar dos celdas es el siguiente (asumiendo que las celdas que se quieren combinar son "C10" y "D10"):
********* INICIO DE CODIGO
Range("C10:D10").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = True
End With
********* FIN DE CODIGO
*/Ahora pasamos los datos de las columnas
oGrid=thisform.ogrid
SELECT (cAliasExp)
nrecord=RECCOUNT()
nveces=3
nfilas=1
SET DATE TO AMERICAN
*/vamos a cambiar el metodo por tenerlo todo en un texto en memoria y de ahi pegarlo en excel
*/aunque no enviara el color de las columnas en el texto ni fondo de la celda como lo hacia antes
ctextopaste=[]
SCAN
thisform.label1.Caption=ALLTRIM(STR(nfilas,8,0))+[ de ]+ALLTRIM(STR(nrecord,8,0))+[ registros]
FOR rmn=1 TO nColumncount
cDatos=aStruct[rmn,2]
IF !EMPTY(cDatos)
IF !ISNULL(&cDatos)
vValor=&cDatos
ENDIF
ELSE
vValor=[]
ENDIF
ccam3v=aStruct[rmn,3]
ccam4v=aStruct[rmn,4]
ccam5v=aStruct[rmn,5]
ccam6v=aStruct[rmn,6]
IF TYPE("ccam3v")="C"
IF ATC("THIS.",ccam3v)>0
nverpunto=ATC("this.",ccam3v)
ccam3v=stuff(ccam3v,nverpunto,5,"oGrid.")
ENDIF
ENDIF
IF TYPE("ccam4v")="C"
IF ATC("THIS.",ccam4v)>0
nverpunto=ATC("this.",ccam4v)
ccam4v=stuff(ccam4v,nverpunto,5,"oGrid.")
ENDIF
ENDIF
IF TYPE("ccam5v")="C"
IF ATC("THIS.",ccam5v)>0
nverpunto=ATC("this.",ccam5v)
ccam5v=stuff(ccam5v,nverpunto,5,"oGrid.")
ENDIF
ENDIF
IF TYPE("ccam6v")="C"
IF ATC("THIS.",ccam6v)>0
nverpunto=ATC("this.",ccam6v)
ccam6v=stuff(ccam6v,nverpunto,5,"oGrid.")
ENDIF
ENDIF
*vColorF=IIF(TYPE("ccam3v")="C",&ccam3v,ccam3v)
IF TYPE("ccam3v")="C"
vColorF=&ccam3v
ELSE
vColorF=ccam3v
ENDIF
*vColorB=IIF(TYPE("ccam4v")="C",&ccam4v,ccam4v)
IF TYPE("ccam4v")="C"
vColorB=&ccam4v
ELSE
vColorB=ccam4v
ENDIF
*vFontN=IIF(TYPE("ccam5v")="C",&ccam5v,ccam5v)
IF TYPE("ccam5v")="C"
vFontN=&ccam5v
ELSE
vFontN=ccam5v
ENDIF
*vFontI=IIF(TYPE("ccam6v")="C",&ccam6v,ccam6v)
IF TYPE("ccam6v")="C"
vFontI=&ccam6v
ELSE
vFontI=ccam6v
ENDIF
IF TYPE("vValor")="D"
vValor=NVL(vValor,"") &&IIF(EMPTY(vValor),"",vValor)
ENDIF
IF TYPE("vValor")="D"
vValor=NVL(vValor,"") &&IIF(EMPTY(vValor),"",vValor)
ENDIF
vValor=NVL(vValor,"")
*xCells=XLSheet.Cells(nfilas+nveces,rmn)
IF TYPE("vValor")="C"
*/si esta vacio no pongo nada en la celda
*IF !EMPTY(vvalor)
ctextopaste=ctextopaste+vValor+CHR(9)
*ENDIF
ELSE
IF ISNULL(vValor)
ctextopaste=ctextopaste+vValor+CHR(9)
ELSE
ctextopaste=ctextopaste+TRANSFORM(vValor)+CHR(9)
ENDIF
ENDIF
ENDFOR
ctextopaste=ctextopaste+CHR(13)
nfilas=nfilas+1
ENDSCAN
_cliptext=ctextopaste
SET DATE TO BRITISH
*/ahora lo vamos a pegar en excel
*Range("A13").Select
* ActiveSheet.Paste
XLSheet.range("A4").select
XLSheet.paste
SCAN
thisform.label1.Caption=ALLTRIM(STR(nfilas,8,0))+[ de ]+ALLTRIM(STR(nrecord,8,0))+[ registros]
FOR rmn=1 TO nColumncount
cDatos=aStruct[rmn,2]
IF !EMPTY(cDatos)
vValor=&cDatos
ELSE
vValor=[]
ENDIF
ccam3v=aStruct[rmn,3]
ccam4v=aStruct[rmn,4]
ccam5v=aStruct[rmn,5]
ccam6v=aStruct[rmn,6]
IF TYPE("ccam3v")="C"
IF ATC("THIS.",ccam3v)>0
nverpunto=ATC("this.",ccam3v)
ccam3v=stuff(ccam3v,nverpunto,5,"oGrid.")
ENDIF
ENDIF
IF TYPE("ccam4v")="C"
IF ATC("THIS.",ccam4v)>0
nverpunto=ATC("this.",ccam4v)
ccam4v=stuff(ccam4v,nverpunto,5,"oGrid.")
ENDIF
ENDIF
IF TYPE("ccam5v")="C"
IF ATC("THIS.",ccam5v)>0
nverpunto=ATC("this.",ccam5v)
ccam5v=stuff(ccam5v,nverpunto,5,"oGrid.")
ENDIF
ENDIF
IF TYPE("ccam6v")="C"
IF ATC("THIS.",ccam6v)>0
nverpunto=ATC("this.",ccam6v)
ccam6v=stuff(ccam6v,nverpunto,5,"oGrid.")
ENDIF
ENDIF
*vColorF=IIF(TYPE("ccam3v")="C",&ccam3v,ccam3v)
IF TYPE("ccam3v")="C"
vColorF=&ccam3v
ELSE
vColorF=ccam3v
ENDIF
*vColorB=IIF(TYPE("ccam4v")="C",&ccam4v,ccam4v)
IF TYPE("ccam4v")="C"
vColorB=&ccam4v
ELSE
vColorB=ccam4v
ENDIF
*vFontN=IIF(TYPE("ccam5v")="C",&ccam5v,ccam5v)
IF TYPE("ccam5v")="C"
vFontN=&ccam5v
ELSE
vFontN=ccam5v
ENDIF
*vFontI=IIF(TYPE("ccam6v")="C",&ccam6v,ccam6v)
IF TYPE("ccam6v")="C"
vFontI=&ccam6v
ELSE
vFontI=ccam6v
ENDIF
IF TYPE("vValor")="D"
vValor=IIF(EMPTY(vValor),"",vValor)
ENDIF
IF TYPE("vValor")="D"
vValor=IIF(EMPTY(vValor),"",vValor)
ENDIF
xCells=XLSheet.Cells(nfilas+nveces,rmn)
IF TYPE("vValor")="C"
*/si esta vacio no pongo nada en la celda
IF !EMPTY(vvalor)
*/predefino la celda para q sea formato texto
XLSheet.Cells(nfilas+nveces,rmn).NumberFormat = "@"
XLSheet.Cells(nfilas+nveces,rmn).Value = vValor
ENDIF
ELSE
XLSheet.Cells(nfilas+nveces,rmn).Value = vValor
ENDIF
XLSheet.Cells(nfilas+nveces,rmn).font.color=vColorF
IF !vColorB=16777215
XLSheet.Cells(nfilas+nveces,rmn).interior.color=vColorB
XLSheet.Cells(nfilas+nveces,rmn).interior.pattern=1
ENDIF
XLSheet.Cells(nfilas+nveces,rmn).font.bold=vFontN
XLSheet.Cells(nfilas+nveces,rmn).font.italic=vFontI
ENDFOR
nfilas=nfilas+1
ENDSCAN
nfilas=nfilas+1
XLSheet.Cells(nfilas+nveces,2).Value ="Fecha Exportación: "+DTOC(DATE())
nfilas=nfilas+1
XLSheet.Cells(nfilas+nveces,2).Value ="Hora Exportación: "+TIME()
nfilas=nfilas+1
XLSheet.Cells(nfilas+nveces,2).Value ="Usuario: "+get_usuario
nfilas=nfilas+1
XLSheet.Cells(nfilas+nveces,2).Value ="PC Orígen: "+ID()
XLApp.Visible = .t.
thisform.oform.LockScreen=.f.