Pregunta con TExcelScript()
Posted: Thu Jun 16, 2011 5:32 am
Hola amigos del foro:
Deseo saber en que forma se puede establecer un formato para numerico o de caracter para una columna en particular de una hoja de Excel generada mediante el uso del clipboard y la clase TExcelScript()... El problema es que usando las funciones de ClipBoard aportadas en los ejemplos, la informacion de la base de datos que intento enviar a Excel se genera correctamente pero los numeros enteros son mostrados sin punto decimal ni ceros... (y son valores de moneda). Ademas los textos que solo contienen numeros se justifican a la derecha y se declaran como numeros aun cuando deben ser caracteres...
Gracias por la ayuda que me puedan brindar...
Aqui el codigo...
oExcel := TExcelScript():New()
oExcel:Create( cOrigen )
cDATA:="CODIGO"+CHR(9)+"CODIGO2"+CHR(9)+"DESCRIPCION"+CHR(9)+"CANTIDAD"+CHR(9)+"PRECIO"+CHR(9)+"TOTAL"+CHR(13)
cTEXT+=cDATA
C:=7;F:=9
DO WHILE !EOF()
IF EMPTY(FIELD->CODIGO)
SKIP;LOOP
ENDIF
cDATA:=''+FIELD->CODIGO+CHR(9)+''+FIELD->CODIGO2+CHR(9)+FIELD->DESCRIP+CHR(9)+STR(FIELD->CANTIDAD)+CHR(9)+STR(FIELD->PRECIO)+CHR(9)+STR(FIELD->PRECIO*FIELD->CANTIDAD)
cTEXT+=cDATA+CHR(13)
nTOTAL+=(FIELD->CANTIDAD*FIELD->PRECIO);FIL++
IF Len( cText ) > 20000
oClip := TClipBoard():New()
oClip:Clear()
oClip:SetText( cText )
oExcel:SetPos('A'+ALLTRIM(STR(F)) )
oExcel:Paste()
oClip:End()
EndIf
cDATA:=''
C++;SKIP
ENDDO
DBGOTOP()
IF !EMPTY(cTEXT)
oClip := TClipBoard():New()
oClip:Clear()
oClip:SetText( cText )
oExcel:SetPos('A'+ALLTRIM(STR(F)) )
oExcel:Paste()
oClip:End()
ENDIF
FOR C = 1 TO 6
oExcel:AutoFit( C )
NEXT
F+=FIL+2
oExcel:Say( F, 1, '#LINEAS:',"Arial",12,.F.,.F.,.F.,3)
oExcel:Say( F, 2, STR(FIL),"Arial",12,.F.,.F.,.F.,3)
oExcel:Say( F, 5, 'TOTAL:',"Arial",12,.T.,.F.,.F.,1)
oExcel:Say( F, 6, STR(nTOTAL),"Arial",12,.T.,.F.,.T.,1)
Deseo saber en que forma se puede establecer un formato para numerico o de caracter para una columna en particular de una hoja de Excel generada mediante el uso del clipboard y la clase TExcelScript()... El problema es que usando las funciones de ClipBoard aportadas en los ejemplos, la informacion de la base de datos que intento enviar a Excel se genera correctamente pero los numeros enteros son mostrados sin punto decimal ni ceros... (y son valores de moneda). Ademas los textos que solo contienen numeros se justifican a la derecha y se declaran como numeros aun cuando deben ser caracteres...
Gracias por la ayuda que me puedan brindar...
Aqui el codigo...
oExcel := TExcelScript():New()
oExcel:Create( cOrigen )
cDATA:="CODIGO"+CHR(9)+"CODIGO2"+CHR(9)+"DESCRIPCION"+CHR(9)+"CANTIDAD"+CHR(9)+"PRECIO"+CHR(9)+"TOTAL"+CHR(13)
cTEXT+=cDATA
C:=7;F:=9
DO WHILE !EOF()
IF EMPTY(FIELD->CODIGO)
SKIP;LOOP
ENDIF
cDATA:=''+FIELD->CODIGO+CHR(9)+''+FIELD->CODIGO2+CHR(9)+FIELD->DESCRIP+CHR(9)+STR(FIELD->CANTIDAD)+CHR(9)+STR(FIELD->PRECIO)+CHR(9)+STR(FIELD->PRECIO*FIELD->CANTIDAD)
cTEXT+=cDATA+CHR(13)
nTOTAL+=(FIELD->CANTIDAD*FIELD->PRECIO);FIL++
IF Len( cText ) > 20000
oClip := TClipBoard():New()
oClip:Clear()
oClip:SetText( cText )
oExcel:SetPos('A'+ALLTRIM(STR(F)) )
oExcel:Paste()
oClip:End()
EndIf
cDATA:=''
C++;SKIP
ENDDO
DBGOTOP()
IF !EMPTY(cTEXT)
oClip := TClipBoard():New()
oClip:Clear()
oClip:SetText( cText )
oExcel:SetPos('A'+ALLTRIM(STR(F)) )
oExcel:Paste()
oClip:End()
ENDIF
FOR C = 1 TO 6
oExcel:AutoFit( C )
NEXT
F+=FIL+2
oExcel:Say( F, 1, '#LINEAS:',"Arial",12,.F.,.F.,.F.,3)
oExcel:Say( F, 2, STR(FIL),"Arial",12,.F.,.F.,.F.,3)
oExcel:Say( F, 5, 'TOTAL:',"Arial",12,.T.,.F.,.F.,1)
oExcel:Say( F, 6, STR(nTOTAL),"Arial",12,.T.,.F.,.T.,1)