FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Columna cancelada con oBrw:ToExcel() ?? SOLUCIONADO
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Columna cancelada con oBrw:ToExcel() ?? SOLUCIONADO
Posted: Thu Aug 18, 2011 10:54 PM
Saludos al foro:

Amigos, estoy usando oBrw:ToExcel() para enviar un browse, creado con recordSet, a Excel, todo
funciona muy bien excepto que una columna del browse cuyo compo indica si el registro esta
cancelado o no en la columna correspondiente en la hoja de excel se muestra en blanco a pesar
de que el registro esta cancelado.

Muestro el c贸digo para ver si alguien me saca de mi error.

Code (fw): Select all Collapse
聽 聽 聽 聽 aCol[ 9] := oBrw:AddCol()
聽 聽 聽 聽 aCol[ 9]:AddResource("SI")
聽 聽 聽 聽 aCol[ 9]:AddResource("NO")
聽 聽 聽 聽 aCol[ 9]:cHeader聽 聽 聽 聽 聽 聽 聽 聽 := "Can"
聽 聽 聽 聽 aCol[ 9]:bBmpData聽 聽聽 聽 聽 聽 聽 聽 := { || IF(oRsHdr:BOF() .AND. oRsHdr:EOF(),2,IIF(oRsHdr:Fields("HDR_CAN"):Value,1,2)) }
聽 聽 聽 聽 aCol[ 9]:nHeadBmpAlign聽聽 聽 聽聽 聽 := AL_RIGHT


Esta columna es la que en excel se muestra en blanco.

xHarbour, MySql y FWH8.10

Saludos y gracias por el apoyo
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Columna cancelada con oBrw:ToExcel() ??
Posted: Fri Aug 19, 2011 12:39 AM

Armando, 驴qu茅 pasar铆a si lo dejas as铆?:
aCol[ 9]:bBmpData := { || IIF(oRsHdr:Fields("HDR_CAN"):Value,1,2) }

Francisco J. Alegr铆a P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Columna cancelada con oBrw:ToExcel() ??
Posted: Fri Aug 19, 2011 01:22 AM

Francisco:

Te agradezco la respuesta pero no, me sale exactamente igual.

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Columna cancelada con oBrw:ToExcel() ??
Posted: Fri Aug 19, 2011 02:51 AM

Tienes raz贸n. Hice pruebas y tampoco me exporta a excel la imagen.

Mi c贸digo es as铆:

  **:MF:cDataType := "P"
  :MF:cToolTip:="Masculino/Femenino"
  :MF:nWidth := 24
  :MF:nEditType := TYPE_IMAGE
  :MF:lBmpStretch     := .t.
  :MF:lBmpTransparent := .T.
  :MF:bStrImage       := {|| if(upper((oLbx:cAlias)->MF)= "M",".\hombre.bmp",".\mujer.bmp") }
Francisco J. Alegr铆a P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Columna cancelada con oBrw:ToExcel() ??
Posted: Fri Aug 19, 2011 02:32 PM

Francisco:

Aunque en mi caso no necesito la imagen sino algo que indique que el registro esta cancelado, tal vez un
(.T.) o (.F.), no necesariamente la imagen de los checkbox

A ver si alguien nos da m谩s luz.

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Columna cancelada con oBrw:ToExcel() ??
Posted: Sat Aug 20, 2011 01:22 PM
Your code
Code (fw): Select all Collapse
aCol [ 9 ] : = oRsHdr: EOF ( ) , 2 , IIF ( oRsHdr: Fields ( "HDR_CAN" ) : Value , 1 , 2 ) ) }

itself is wrong. This code even should give a syntax error while compiling.

You are assigning a numeric value to the browse column object and thereby destroying the browse column object itself.

Probably you wanted to assign it as a codeblock to oCol[9]:bBmpData.
In that case, the code should be:
Code (fw): Select all Collapse
aCol [ 9 ]:bBmpData : = { || oRsHdr: EOF ( ) , 2 , IIF ( oRsHdr: Fields ( "HDR_CAN" ) : Value , 1 , 2 ) ) }


ToExcel() exports the evaluated result of oCol:bEditValue codeblock but not the evaluated result of oCol:bBmpData.

Better way of programming is to adopt the logic in this sample:
Code (fw): Select all Collapse
#include 'fivewin.ch'
#include 'ord.ch'
#include 'xbrowse.ch'
#include 'hbcompat.ch'

REQUEST DBFCDX

function Main()

   local oDlg, oBrw, oFont

   RDDSETDEFAULT( "DBFCDX" )
   SET DELETED OFF
   USE CUSTOMER

   DEFINE FONT oFont NAME 'TAHOMA' SIZE 0,-12
   DEFINE DIALOG oDlg SIZE 500,250 PIXEL FONT oFont

   @ 30,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      COLUMNS "First","City" ;
      ALIAS "CUSTOMER" CELL LINES NOBORDER

   ADD TO oBrw DATA !(oBrw:cAlias)->(DELETED()) HEADER "Status"
   oBrw:aCols[ 3 ]:SetCheck()

   oBrw:CreateFromCode()

   @ 10,10 BUTTON "ToExcel" SIZE 40,12 PIXEL OF oDlg ACTION oBrw:ToExcel()

   ACTIVATE DIALOG oDlg CENTERED ON INIT ( oBrw:SetFocus(), .f. )
   RELEASE FONT oFont

return nil

Screenshot of browse:


Screenshot of exported excel
Regards



G. N. Rao.

Hyderabad, India
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Columna cancelada con oBrw:ToExcel() ??
Posted: Sat Aug 20, 2011 01:29 PM

ToExcel() exports images also.

But please keep in mind, ToExcel() exports the evaluated result of bEditValue but not bBmpData or bStrImage. ( btw bStrImage is now obsolete for long. oCol:bEditValue itself can return image buffer or image file name if cDataType is set to 'F' )

Regards



G. N. Rao.

Hyderabad, India
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Columna cancelada con oBrw:ToExcel() ??
Posted: Sat Aug 20, 2011 02:03 PM
FranciscoA wrote:Tienes raz贸n. Hice pruebas y tampoco me exporta a excel la imagen.

Mi c贸digo es as铆:

**:MF:cDataType := "P"
:MF:="Masculino/Femenino"
:MF:nWidth := 24
:MF:nEditType := TYPE_IMAGE
:MF:lBmpStretch := .t.
:MF:lBmpTransparent := .T.
:MF:bStrImage := {|| if(upper((oLbx:cAlias)->MF)= "M",".\hombre.bmp",".\mujer.bmp") }

Please try it this way:
Code (fw): Select all Collapse
#include 'hbcompat.ch'

REQUEST DBFCDX

function Main()

   local oDlg, oBrw, oFont

   RDDSETDEFAULT( "DBFCDX" )
   SET DELETED OFF
   USE CUSTOMER

   DEFINE FONT oFont NAME 'TAHOMA' SIZE 0,-12
   DEFINE DIALOG oDlg SIZE 640,400 PIXEL FONT oFont

   @ 30,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      COLUMNS "First","City" ;
      ALIAS "CUSTOMER" CELL LINES NOBORDER

   ADD TO oBrw DATA !(oBrw:cAlias)->(DELETED()) HEADER "Status"
   oBrw:aCols[ 3 ]:SetCheck()

   ADD TO oBrw DATA If( (oBrw:cAlias)->Married, "c:\fwh\bitmaps\users.bmp", "c:\fwh\bitmaps\user.bmp" ) ;
      HEADER "Marital"
   WITH OBJECT ATail( oBrw:aCols )
      :cDataType     := 'F'
      :nWidth        := 40
   END

   oBrw:nRowHeight   := 40
   oBrw:CreateFromCode()

   @ 10,10 BUTTON "ToExcel" SIZE 40,12 PIXEL OF oDlg ACTION oBrw:ToExcel()

   ACTIVATE DIALOG oDlg CENTERED ON INIT ( oBrw:SetFocus(), .f. )
   RELEASE FONT oFont

return nil

browse:

Exported Excel:
Regards



G. N. Rao.

Hyderabad, India
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Columna cancelada con oBrw:ToExcel() ??
Posted: Sat Aug 20, 2011 03:00 PM
Mr. nageswaragunupudi

Thank you very much by your advice.

nageswaragunupudi wrote:Your code
Code (fw): Select all Collapse
aCol [ 9 ] : = oRsHdr: EOF ( ) , 2 , IIF ( oRsHdr: Fields ( "HDR_CAN" ) : Value , 1 , 2 ) ) }

itself is wrong. This code even should give a syntax error while compiling.

You are assigning a numeric value to the browse column object and thereby destroying the browse column object itself.

Probably you wanted to assign it as a codeblock to oCol[9]:bBmpData.
In that case, the code should be:
Code (fw): Select all Collapse
aCol [ 9 ]:bBmpData : = { || oRsHdr: EOF ( ) , 2 , IIF ( oRsHdr: Fields ( "HDR_CAN" ) : Value , 1 , 2 ) ) }



As you can see in my first post, my sample code is as follow

Code (fw): Select all Collapse
聽 聽 聽 聽 aCol[ 9]聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 := oBrw:AddCol()
聽 聽 聽 聽 aCol[ 9]:AddResource("SI")
聽 聽 聽 聽 aCol[ 9]:AddResource("NO")
聽 聽 聽 聽 aCol[ 9]:cHeader聽 聽 聽 聽 聽 聽 聽 聽 := "Can"
聽 聽 聽 聽 aCol[ 9]:bBmpData聽 聽聽 聽 聽 聽 聽 聽 := { || IF(oRsHdr:BOF() .AND. oRsHdr:EOF(),2,IIF(oRsHdr:Fields("HDR_CAN"):Value,1,2)) }
聽 聽 聽 聽 aCol[ 9]:nHeadBmpAlign聽 聽 聽 := AL_RIGHT


And there is not syntax error while compiling. :-)

I will try your tip, thanks againg.

Best regards
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: Columna cancelada con oBrw:ToExcel() ??
Posted: Sat Aug 20, 2011 03:39 PM

Armando,
y si ya tienes el campo en el recordset como logico, condiciona al exportar si es .T. envia como dato de la columna a excel "CANCELADO", sino "ACTIVO"
digo, se me ocurre...

salu2
pak.o

____________________

Paco
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Columna cancelada con oBrw:ToExcel() ??
Posted: Sat Aug 20, 2011 04:14 PM

Paquito (el del barrio? :) )

Te agradezco la sugerencia pero resulta que con llamar al m茅todo oBrw:ToExcel() xBrowse se encarga
de hacer la tarea, yo no meto mano a nada, al menos no se c贸mo hacerlo :(

Un abrazo

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: Columna cancelada con oBrw:ToExcel() ??
Posted: Sat Aug 20, 2011 05:17 PM

Amando,

bueno y porque no lo haces al vuelo,,,
se me ocurre, cuando das click para exportar, oBrw:ToExcel(), antes de esto, duplica o clona tu recordset, cambia el dato de la columna9, en lugar de una imagen pon el texto, luego envias a excel y cuando termine, regresa tu recordset clonado a original y listo...
REDEFINE BUTTON "a Excel" ACTION( clonarrecordset(), oBrw:ToExcel(), cloanrecordset() )
jeje la solucion del barrio,
salu2
pak.o

____________________

Paco
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Columna cancelada con oBrw:ToExcel() ??
Posted: Sat Aug 20, 2011 05:29 PM
Francisco Horta wrote:Amando,

bueno y porque no lo haces al vuelo,,,
se me ocurre, cuando das click para exportar, oBrw:ToExcel(), antes de esto, duplica o clona tu recordset, cambia el dato de la columna9, en lugar de una imagen pon el texto, luego envias a excel y cuando termine, regresa tu recordset clonado a original y listo...
REDEFINE BUTTON "a Excel" ACTION( clonarrecordset(), oBrw:ToExcel(), cloanrecordset() )
jeje la solucion del barrio,
salu2
pak.o


Not at all necessary.
Method oBrw:ToExcel() does most of the work on its own.
Only thing is please keep in mind it considers oCol:bEditValue only.

Instead of the original code:
Code (fw): Select all Collapse
 聽 聽 聽 聽aCol[ 9] 聽:= oBrw:AddCol()
聽 聽 聽 聽 aCol[ 9]:AddResource("SI")
聽 聽 聽 聽 aCol[ 9]:AddResource("NO")
聽 聽 聽 聽 aCol[ 9]:cHeader 聽 聽 聽 聽 聽 聽 聽 聽:= "Can"
聽 聽 聽 聽 aCol[ 9]:bBmpData 聽 聽 聽 聽 聽 聽 聽 := { || IF(oRsHdr:BOF() .AND. oRsHdr:EOF(),2,IIF(oRsHdr:Fields("HDR_CAN"):Value,1,2)) }
聽 聽 聽 聽 aCol[ 9]:nHeadBmpAlign 聽 聽 聽:= AL_RIGHT

Please replace with this simpler code:
Code (fw): Select all Collapse
 聽 聽 聽 聽aCol[ 9] 聽 聽:= oBrw:AddCol()
聽 聽 聽 聽 aCol[ 9]:cHeader 聽 聽 聽:= "Can"
聽 聽 聽 聽 aCol[ 9]:bEditValue := { || oRsHdr:RecordCount() > 0 .and. oRsHdr:Fields("HDR_CAN"):Value }
聽 聽 聽 聽 aCol[ 9]:SetCheck( { "SI","NO" } )

This code produces the same result and also ToExcel() works the way I showed in the above sample.
Regards



G. N. Rao.

Hyderabad, India
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: Columna cancelada con oBrw:ToExcel() ??
Posted: Sat Aug 20, 2011 05:40 PM

Rao,
Bueno, claro que se me ocurrio asi, pensando que Armando no quiera quitar la imagen de su xbrowse, pero...
Claro es mucho mejor, solucion rapida y efectiva,,, lo tendre en mente (bEditValue),jeje
saludos
pak.o

____________________

Paco
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Columna cancelada con oBrw:ToExcel() ??
Posted: Sat Aug 20, 2011 05:43 PM
Francisco Horta wrote:Rao,
Bueno, claro que se me ocurrio asi, pensando que Armando no quiera quitar la imagen de su xbrowse, pero...
Claro es mucho mejor, solucion rapida y efectiva,,, lo tendre en mente (bEditValue),jeje
saludos
pak.o

Even my suggestion does not remove the image.
My suggestion also shows the image in the same manner but this is the appropriate way to code the requirement.
Regards



G. N. Rao.

Hyderabad, India