Constantes de los colores para colocar lineas y fondos en traslados de visual foxpro a excel

1,716 views
Skip to first unread message

Manuel Suarez

unread,
Jan 26, 2012, 8:26:28 PM1/26/12
to Comunidad de Visual Foxpro en Español
Les agradezco si me colaboran para poder conformar archivos en excel
desde visual foxpro. Necesito saber cuales son las constantes de los
colores amarillo, blanco, como hago para colocar las lineas en negilla
y para combinar celdas. Muchas gracias por lo que me puedan colaborar
Manuel Suarez
Barranquilla, Colombia
mafr...@yahoo.com

Daniel Sánchez

unread,
Jan 27, 2012, 2:37:15 AM1/27/12
to publice...@googlegroups.com
En este código puedes sacar varias cosas que necesitas

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.

Saludos

--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú

Irlandes 1960

unread,
Jan 27, 2012, 6:50:07 AM1/27/12
to publice...@googlegroups.com
Mira , lo que tengo es pintar el fondo de 
.columna("A1:B1").SELECT
.selection.Interior.ColorIndex = 34  &&celeste
.selection.Interior.ColorIndex = 36  &&amarillo
.selection.Interior.ColorIndex = 35  &&verde
la paleta de colores es menor que en vfp 
También 3, 6, y 45 pero no recuerdo que colores son 

Luis Maria Guayan

unread,
Jan 27, 2012, 8:48:11 AM1/27/12
to publice...@googlegroups.com
Excel maneja (o al menos hasta la versión 2003) 56 colores. Aquí una tabla con las equivalencias RGB() y HTML

http://www.mvps.org/dmcritchie/excel/colors.htm

Amarillo = 6
Blanco = 2

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Irlandes 1960

unread,
Jan 27, 2012, 10:08:59 AM1/27/12
to publice...@googlegroups.com
Definitivamente Luis María es la demostración de que existen aliens entre nosotros ¿como hace para saber esas cosas? 

Manuel Suarez

unread,
Jan 27, 2012, 6:01:19 PM1/27/12
to Comunidad de Visual Foxpro en Español
Muchas gracias a todos, se me olvido consultar la instruccion en
visual foxpro para dar el ancho de columna que no la encuentro. Les
agradezco mucho, les debo muchas ya que constantemente consulto en
este grupo y cada dia aprendo cosas nuevas. Espero algun dia colaborar
y dar mis modestos aportes
Bendiciones
Manuel Suarez
Barranquilla, Colombia
mafr...@yahoo.com


> mafras...@yahoo.com

Mario Alfredo

unread,
Jan 31, 2012, 5:15:33 PM1/31/12
to Comunidad de Visual Foxpro en Español
se me olvido consultar la instruccion en
visual foxpro para dar el ancho de columna que no la encuentro

esas instrucciones no son de fox
cuando tengas dudas como es la instruccion
crea un macro en excel
y cambias el ancho de la columna y te grabara la instruccion
la colocas en fox


On 27 ene, 17:01, Manuel Suarez <mafras...@yahoo.com> wrote:
> Muchas gracias a todos, se me olvido consultar la instruccion en
> visual foxpro para dar el ancho de columna que no la encuentro. Les
> agradezco mucho, les debo muchas ya que constantemente consulto en
> este grupo y cada dia aprendo cosas nuevas. Espero algun dia colaborar
> y dar mis modestos aportes
> Bendiciones
> Manuel Suarez
> Barranquilla, Colombia
> mafras...@yahoo.com

Mario Alfredo

unread,
Jan 31, 2012, 5:17:33 PM1/31/12
to Comunidad de Visual Foxpro en Español
ColumnWidth = 10
esta es la instruccion

On 27 ene, 17:01, Manuel Suarez <mafras...@yahoo.com> wrote:
> Muchas gracias a todos, se me olvido consultar la instruccion en
> visual foxpro para dar el ancho de columna que no la encuentro. Les
> agradezco mucho, les debo muchas ya que constantemente consulto en
> este grupo y cada dia aprendo cosas nuevas. Espero algun dia colaborar
> y dar mis modestos aportes
> Bendiciones
> Manuel Suarez
> Barranquilla, Colombia
> mafras...@yahoo.com
Reply all
Reply to author
Forward
0 new messages