ich habe Beispielcode mit #command um ? oder ?? zu nutzen um Daten in XLSX Blätter zu schreiben von Osvaldo.
Bei der Einarbeitung in meine HBLibXL fiel mir auf, dass beide Methoden im Prinzip gleich sind, nur bei Q wird noch der Zeilenvorschub eingebaut.
Code: Alles auswählen
// Q, QQ etc. von/from Osvaldo Ramírez
// ? xxxx => oSheet:Q(...xxxx...)
#command ? [<list,...>] => oSheet:Q( <list> )
#command ?? [<list,...>] => oSheet:QQ( <list> )
Code: Alles auswählen
METHOD xlSheet:QQ()
LOCAL cText
LOCAL i,nParams
LOCAL xValue,cType
LOCAL aValues := {}
******* how many params?
nParams := PCount()
IF nParams > 1
FOR i := 1 TO nParams
aadd( aValues , { PValue(i) , valtype( PValue(i) )})
NEXT
ELSE
if nParams = 1
xValue := PValue(1)
// Vamos a ver si la separacion es por chr(19)
do while ! empty( xValue )
if at( chr(9) , xValue ) > 0
aadd( aValues , { substr( xValue , 1 , at( chr(9) , xValue )-1) , 'C' })
xValue := substr( xValue , at( chr(9) , xValue )+1)
else
aadd( aValues , { xValue , 'C' })
exit
endif
enddo
endif
ENDIF
FOR i := 1 to len( aValues )
IF aValues[i][2] == "C"
::SheetWriteStr( ::qRow , ::qCol , aValues[i][1] )
ELSEIF aValues[i][2] == "D"
::SheetWriteDate( ::qRow , ::qCol ,aValues[i][1] )
ELSEIF aValues[i][2] == "N"
::SheetWriteNum( ::qRow , ::qCol , aValues[i][1])
ELSEIF aValues[i][2] == "L"
::SheetWriteStr( ::qRow , ::qCol , var2char( aValues[i][1] ))
ENDIF
::qCol ++
NEXT
RETURN NIL
Code: Alles auswählen
METHOD xlSheet:Q()
LOCAL cText
LOCAL i,nParams
LOCAL xValue,cType
LOCAL aValues := {}
******* how many params?
nParams := PCount()
IF nParams > 1
FOR i := 1 TO nParams
aadd( aValues , { PValue(i) , valtype( PValue(i) )})
NEXT
ELSE
if nParams = 1
xValue := PValue(1)
// Vamos a ver si la separacion es por chr(19)
do while ! empty( xValue )
if at( chr(9) , xValue ) > 0
aadd( aValues , { substr( xValue , 1 , at( chr(9) , xValue )-1) , 'C' })
xValue := substr( xValue , at( chr(9) , xValue )+1)
else
aadd( aValues , { xValue , 'C' })
exit
endif
enddo
endif
ENDIF
FOR i := 1 to len( aValues )
IF aValues[i][2] == "C"
::SheetWriteStr( ::qRow , ::qCol , aValues[i][1] )
ELSEIF aValues[i][2] == "D"
::SheetWriteDate( ::qRow , ::qCol ,aValues[i][1])
ELSEIF aValues[i][2] == "N"
::SheetWriteNum( ::qRow , ::qCol , aValues[i][1])
ELSEIF aValues[i][2] == "L"
::SheetWriteStr( ::qRow , ::qCol , var2char( aValues[i][1] ))
ENDIF
::qCol ++
NEXT
*** HB *** nur das ist unterschiedlich
::qCol := 0
::qRow ++
*** HB ***
RETURN NIL
Hat jemand eine Idee ?
Code: Alles auswählen
? "Unbestimmte Anzahl","von","Paramtern sind das Problem " , nZahl ...
=>
o:Q() // hier kommen die von COMMAND übergebenen ? Parameter an ...
...
method x:Q()
// Parameter ermitteln und weitergeben an QQ ...
::QQ() --- aber wie wenn QQ auch direkt von Command aufgerufen werden kann ohne alles wieder zu verpacken ????
*** HB *** nur das ist unterschiedlich
::qCol := 0
::qRow ++
*** HB ***
return NIL
aber mir fällt kein Weg ein, die Parameter einfach durchzureichen ohne alles in Vars umzuladen etc.
Natürlich könnte ich die Schnittstelle ändern, aber dann würde ich seinen Code brechen, das will ich nicht.