#DEFINE XFRX_FORMATCOL_FNAME 1 && Field name
#DEFINE XFRX_FORMATCOL_FTYPE 2 && Field type
#DEFINE XFRX_FORMATCOL_FWIDTH 3 && Field width
#DEFINE XFRX_FORMATCOL_FDEC 4 && Field decimals
#DEFINE XFRX_FORMATCOL_FNULL 5 && NULL indicator
#DEFINE XFRX_FORMATCOL_FNOCPT 6 && NOCPTRANS indicator
#DEFINE XFRX_FORMATCOL_CAPTION 7 && Header caption
#DEFINE XFRX_FORMATCOL_XLSFORMAT 8 && XLS format
#DEFINE XFRX_FORMATCOL_WIDTH 9 && Column Width in px
#DEFINE XFRX_FORMATCOL_HCELLF 10 && Header cell format - Object with attributes
#DEFINE XFRX_FORMATCOL_TMODE 11 && Trim Mode 0 - none, 1 - LTRIM, 2 - RTRIM, 3 - ALLTRIM
#DEFINE XFRX_FORMATCOL_DCELLF 12 && Data cell format - Object with attributes
#DEFINE XFRX_FORMATCOL_CP 14 && Code Page (XFRX 18.2.0)
#DEFINE XFRX_FORMATCOL_ISFORMULA 15 && Formula (Yes/No)
#DEFINE _TOXLSX_ERROR_OK 0 && OK
#DEFINE _TOXLSX_ERROR_OpenTemplateFailed -1 && Cannot open template file
#DEFINE _TOXLSX_ERROR_PrepareFilesFailed -2 && Cannot create files
#DEFINE _TOXLSX_ERROR_SaveToXLSXFailed -3 && Cannot create xlsx file (zlib.dll)
#DEFINE _TOXLSX_ERROR_SaveToXLSX_ODSFailed -200 && Cannot create xlsx/ods file (zlib.dll)
...
m.liErr=XFRX_CopyToXLSX("test", "test.xlsx", "copytoxlsxfccallback", "test")
...
PROCEDURE copytoxlsxfccallback(m.laFields)
LOCAL ARRAY m.laColor(3)
FOR m.lii=1 TO ALEN(m.laFields,1)
m.laFields(m.lii,XFRX_FORMATCOL_CAPTION)="Description "+;
LTRIM(STR(m.lii,11))+" "+;
m.laFields(m.lii,XFRX_FORMATCOL_FNAME) && Caption
* Header cell format
WITH m.laFields(m.lii,XFRX_FORMATCOL_HCELLF)
.align="center" && horizontal align
.font="Tahoma"
.fontsize=12
.bold=.T.
.ital=.T.
.underline=.T.
.lstriked=.T. && StrikeThru
__C2RGB(RGB(255,255,255),@m.laColor) && BackColor
.fillred=m.laColor(1)
.fillgreen=m.laColor(2)
.fillblue=m.laColor(3)
__C2RGB(RGB(192,192,192),@m.laColor) && ForeColor
.penred=m.laColor(1)
.pengreen=m.laColor(2)
.penblue=m.laColor(3)
ENDWITH
* Data cell format
WITH m.laFields(m.lii,XFRX_FORMATCOL_DCELLF)
.lstriked=.T.
.font="Courier New"
.DynamicFontBold=[IIF(UNITPRICE>50,.T.,.F.)]
.DynamicForeColor=[IIF(UNITPRICE>50,RGB(255,0,0),0)]
.DynamicFontItalic=[IIF(UNITPRICE>50,.T.,.F.)]
.DynamicFontUnderline=[IIF(UNITPRICE>50,.T.,.F.)]
.DynamicFontName=[IIF(UNITPRICE>50,'Courier New','Arial')]
.DynamicFontSize=[IIF(UNITPRICE>50,12,10)]
.DynamicAlignment=[IIF(UNITPRICE>50,'center','')]
.DynamicBackColor=[IIF(UNITPRICE>50,RGB(192,192,192),RGB(255,255,255))]
.DynamicFontStrikeThru=[IIF(UNITPRICE>50,.T.,.F.)]
IF INLIST(m.laFields(m.liCol, XFRX_FORMATCOL_FTYPE), "B", "F", "N", "I","Y")
.DynamicXLSFORMAT=[IIF(UNITPRICE>=1000,'0.00','# ##0.00')] && Since XFRX 19.0.0
m.laFields(lii,XFRX_FORMATCOL_XLSFORMAT)=""
ENDIF
ENDWITH
*m.laFields(m.lii,XFRX_FORMATCOL_XLSFORMAT)="" && XLS cell format
m.laFields(m.lii,XFRX_FORMATCOL_WIDTH)=100 && Width in pixels
m.laFields(m.lii,XFRX_FORMATCOL_TMODE)=3 && Trim Mode 0 - none, 1 - LTRIM, 2 - RTRIM, 3 - ALLTRIM
NEXT