Page 1 of 1
tsbrowse 8 y excelole() con numeros decimales
Posted: Wed Nov 04, 2009 8:40 pm
by armando.lagunas
hola:
al traspasar una tabla DBF utilizando oBrw:ExcelOle(), la columna que contiene un campo numerico con decimales (con formato 9999.99), queda cargada a la izquierda y no es procesada como campo numerico, hay que cambiar manualmente a 9999,9 para que excel la considere com numerica y puedan hacerse operaciones matematicas con esta columna.
la pregunta es ¿ Cómo puedo cambiar el "." por la "," en el METHOD ExcelOle() para que cuando realize el traspaso a una planilla excel quede automaticamente como Numero y sus respectivos decimales?..
pd. los numeros sin decimales actuan en forma normal.
desde ya gracias.
Re: tsbrowse 8 y excelole() con numeros decimales
Posted: Wed Nov 04, 2009 11:25 pm
by sysctrl2
disculpa que browse estas usando ?
yo uso xbrowse y el method se llama oBrw:ToExcel()
Re: tsbrowse 8 y excelole() con numeros decimales
Posted: Wed Nov 04, 2009 11:30 pm
by sysctrl2
perdon Armando, ya mire que usas TSBRW sorry.
a mi me paso algo similar, pero con la txbrw y tuve que modificar las class para evitar que suprimiera los decimales..
saludos...
Re: tsbrowse 8 y excelole() con numeros decimales
Posted: Thu Nov 05, 2009 2:51 am
by armando.lagunas
la idea es modificar algo en el metodo que maneja la sbrowse version 8.
creo que esta aqui, lina 3843 de la clase, pero no estoy seguro.
If ::aColumns[ nCol ]:cPicture != Nil
uData := Transform( uData, ::aColumns[ nCol ]:cPicture )
EndIf
uData := IIF( ValType( uData )=="D", DtoC( uData ), ;
aqui--> IIF( ValType( uData )=="N", Str( uData ) , ; <--
IIF( ValType( uData )=="L", IIF( uData ,".T." ,".F." ), cValToChar( uData )))
cText += Trim( uData ) + Chr( 9 )
pero no se como realizar el cambio correcto...
espero que me ayuden...
Re: tsbrowse 8 y excelole() con numeros decimales
Posted: Thu Nov 05, 2009 7:20 am
by mmercado
Hola Armando:
armando.lagunas wrote:la idea es modificar algo en el metodo que maneja la sbrowse version 8.
creo que esta aqui, lina 3843 de la clase, pero no estoy seguro.
No es necesaria ninguna modificación a la Clase, el método ExcelOle admite un parámetro (séptimo) con el que puedes manipular la hoja de excel a tu antojo, dicho parametro es un bloque de código que se evaluará al momento de la creación de la hoja.
Aquí te muestro un ejemplo:
Code: Select all
bExtern := {|oSheet| oSheet:Columns( 10 ):Set( "NumberFormat", "#,##0.00" ) }
Define Button OF oBar Resource "Excel" ;
Action oBrw:ExcelOle( "Test.xls", .T.,, cTitle,,, bExtern ) ;
ToolTip "Export Browse to Excel"
En el bloque del ejemplo se está asignando el formato numérico que se indica a todas las celdas de la columna 10.
Un abrazo.
Re: tsbrowse 8 y excelole() con numeros decimales
Posted: Fri Nov 06, 2009 4:17 pm
by armando.lagunas
Estimado Manuel
utilice su sugerencia y resultó bien, pero para una sola columna, la tabla que llevo a excel tiene varias columnas con campos decimales y en diferentes posiciones, dependiendo del resultado obtenido de cálculos matemáticos, que determinan la demanda de un producto "x".
solucione el problema insertando una nueva instrucción en la linea 3844 de la clase original del método ExcelOle() en donde reemplazo el "punto" decimal por la "coma" del formato de salida de la columna utilizando la función STRTRAN().
3842 If ::aColumns[ nCol ]:cPicture != Nil
3843 uData := Transform( uData, ::aColumns[ nCol ]:cPicture )
3844 uData := Strtran ( uData,".",",") // decimales en excel by Armando Lagunas
3845 EndIf
con este cambio, todo funciona muy bien y el formato de salida es el correcto para las columnas que contengan números.
gracias a sus comentarios
saludos desde Chile.