by César E. Lozada » Sat May 08, 2010 5:13 pm
La historia comienza así:
*------------------------------------------------
METHOD New(cXlsFile,nSheets,cPathDll,lInfo) CLASS tOleXlsFile
Local n
DEFAULT nSheets:=1
DEFAULT cPathDll:=cAppPath()
DEFAULT lInfo:=.T.
BYNAME cPathDll, lInfo
IF !::LoadDll()
return Self
ENDIF
cXlsFile:=cFullFileName(cXlsFile)
BYNAME cXlsFile
::oWorkBook := ::oXlsFile:XLSFile:Workbook
::nDateFormat:=::oWorkbook:FormatStrings:AddFormat(::cDateFormat)
::oWorkbook:Sheets(1):Name := "Hoja1"
for n:=2 to nSheets
::SheetAdd()
next
::SheetSelect(1)
::SheetInit()
return Self
*------------------------------------------------
METHOD LoadDll() CLASS tOleXlsFile
Local cDll
cDll:=::cPathDll+"\olexlsf.dll"
TRY
::oXlsFile:=CreateObject("olexlsf.XLSFileObject")
CATCH
::lError:=.T.
END
IF ::lError
IF !File(cDll)
MsgAlert("No está "+cDll)
ELSE
TRY
WaitRun("regsvr32 "+["]+cDll+["]+" /s")
SysRefresh()
::oXlsFile:=CreateObject("olexlsf.XLSFileObject")
::lError:=.F.
CATCH
MsgAlert("No se pudo cargar "+cDll)
END
ENDIF
ENDIF
IF !::lError
::oStyleNormal := tXlsStyle():New()
::oStyleTitle := tXlsStyle():New({"FontHeight" =>12, "FontBold" => .T., "Merged"=>.T., "HAlign"=>xlHAlignCenter})
::oStyleHeader := tXlsStyle():New({"cBorders" => "TB",;
"nBordersStyle" => bsThin,;
"FillPattern" => xlPatternSolid,;
"FillPatternBGColorIndex" => xlColorGray25})
ENDIF
return !::lError
donde tXlsStyle es una clase que define define los estilos o formatos de un grupo de celdas.
Aprovecho también para compartir con todos ustedes una metodología que aprendí, examinando algunos programas en PHP, para el paso de parámetros a un método de una clase, aunque también podría ser aplicable a funciones o procedimientos. Nótese que, en vez de pasar muchos parámetros a un método en un orden que debo conocer a la perfección, envío un único parámetro tipo Hash(). El método que los recibe entonces sólo tiene que verificar si los keys enviados en el hash son DATA de la clase, caso en el cual le asigna el valor del hash o lo ignora si no lo es.