estoy integrando en una toolbar la exportación a excel de vTools, pero he observado que si tengo en una columna datos númericos con edición “Local”, los “.” de miles me los convierte en “,” decimal, dando unos valores erróneos.
Alguna pista?
Un saludo
pd. la configuración de “.” para miles y “,” para decimales es correcta
Comprueba que tienes la última versión de vTools, la 18.1.
La exportación a Excel de vTools es muy básica, basada en el motor VBScript (solo Windows) y con un tratamiento de los números que tira por la calle de enmedio tratándolos como strings.
Lo más correcto es que los números, al igual que las fechas se exporten siempre en formatos independientes del sistema, es decir, con separador de punto decimal y sin separador de miles.
En su dia, ví algunos problemas en el código de vTools:
Para detectar los decimales de la columna ejecuta → var datoEnPartes = dato.split(".") por lo tanto contempla como separador de decimales el punto, lo que no siempre es cierto.
Rodea los datos numéricos entre comillas → scriptVB += ‘objSheet.Cells(’ + (fila+2) + ‘,’ + (columna+1-ocultas) + ‘).Value = "’ + dato + ‘"\r\n’; por lo tanto en Excel se reciben como textos y debemos pasarlos manualmente a números.
La condición → if (this.rejilla.dataType(columna) == VGridListDataView.TypeNumber) se cumple para algunas columnas y para otras no, aún siendo todas numéricas. Parece ser que si aplicas formato de alguna clase (negrita, fuente, …) deja de ser numérica.
Revisa el fichero VBS generado ExcelScript.vbs en la caché:
objSheet.Cells(2,2).Value =chr(39)+“Febrero” → esto es un string, correcto
objSheet.Cells(2,4).Value =chr(39)+“48.000,26” → Un número es así como lo genera VELNEO, Excel lo recoge como texto
objSheet.Cells(2,5).NumberFormat =“0.0#”
objSheet.Cells(2,5).Value = 48000.26 → Así es como debería de generarse para que sea un número
En fin, son muchas cosas las que hay que revisar y por eso lo de consultar a Soporte.
después de estar intercambiado correos con soporte y no obtener una solución a esta incidencia, me comentan que van a realizar pruebas.
Yo no he programado nunca en JavaScript, pero me he aventurado a modificar el código de las vTools (total, un “if” y un “else” ya sabemos qué hacen en cualquier lenguaje).
Con esta modificación se resuelve la exportación de datos numéricos, tengan o no decimales. Además se corrige la conversión que hacía a Texto y pasan directamente como numérico.
Le he enviado el fichero JS a soporte para que lo revisen y modifiquen lo que crean conveniente.
Os adjunto el fichero modificado. Las líneas que han cambiado/añadido están comentadas previamente con asteriscos.
Un saludo
pd. no sé si debido a mi desconocimiento de JS habré cometido algún “sacrilegio” en el código de las vTools. Supongo que me podrán perdonar
he modificado de nuevo el JS y funciona incluso para campos calculados con fórmula y campos con atributos aplicados.
El problema estaba (entre otras cosas) en la validación del tipo de columna, en la sentencia if (this.rejilla.dataType(columna) == VGridListDataView.TypeNumber)
La he sustituido por if (isNaN(datoEnPartes[0])==false) para que compruebe si es un valor numérico válido. He usado para comparar la parte izquierda del dato para así evitar errores en el caso de campos alfanuméricos tipo “C/LARGA, 23”. Si comparamos con el dato que está a la derecha de la “,” o un “.” (dependiendo nuestra configuración regional) lo tomaría como numérico cuando no es correcto.
Bueno no me enrollo más. Adjunto de nuevo el fichero JS