2012-08-17 16 views
5

Estoy exportando datos de un CxDBGrid a un archivo de Excel. Puedo crear el archivo y copiar datos en él, pero estoy teniendo problemas reales con el formato de la columna. Como estoy extrayendo los datos de una base de datos, me gustaría que la hoja de cálculo refleje el tipo: NÚMERO, VARCHAR2, FECHA, etc. creé visualmente una macro, se fue a buscar el código VBA, y se replica en el proyecto de Delphi:¿Cómo configuro los tipos y el formato de columna de Excel?

sheet.Columns[K+2].NumberFormat := '0,000'; //Number 
sheet.Columns[K+2].NumberFormat := '@'; //Text 
sheet.Columns[K+2].NumberFormat := 'm/d/yyyy'; //Date 

formato de número de obras bien la mayor parte de las veces, pero los otros dos no lo hacen. Cuando abro el archivo generado, las columnas de texto aparecen como tipo "Personalizado" y cada celda muestra "-64". Si voy a editar una celda, el valor correcto está ahí. La fecha es otro problema: el formato de la base de datos es dd/mm/aaaa y si lo paso a Excel tal como está, todo se complica. Intenté establecer el formato correcto, pero Excel no lo reconoce.

Alguna pista?

También estoy configurando el ancho de la columna. Eso funciona a la perfección.

+0

Supongo que cuando dice cxDbGrid se refiere a los componentes de Developer Express. Si es así, ¿está exportando a Excel utilizando el procedimiento ExportGridToExcel() provisto por Developer Express? –

+0

Lo he intentado pero tiene problemas para configurar el tipo de datos. Es por eso que quiero hacer las cosas manualmente – asg2012

+0

utilizo ExportGridToExcel() una serie de lugares sin ningún tipo de problemas relacionados con los tipos de datos o el formato de exportación. Sin ver su código es difícil descubrir por qué no funcionó para usted. En lugar de tomarse la molestia de escribir su propia exportación, le preguntaría en el sitio de soporte de Developer Express si pueden ayudarlo. Su soporte es excelente y generalmente pueden ayudarlo con una solución muy rápidamente. –

Respuesta

3

No ha dicho "cómo está haciendo las cosas manualmente", lo que significa que la gente tiene que adivinar por completo lo que está haciendo. Así que aquí está mi conjetura salvaje:

  1. Si supongo que está utilizando el componente de hoja de cálculo Express desde Developer Express Tengo experiencia estensive con este componente. No admite formatos numéricos arbitrarios. Es compatible con un formato de "dinero" (0.00) con exactamente dos lugares decimales. No admite tres o uno, ni ninguna otra cantidad de decimales. Si es así, este es un problema de diseño conocido en la hoja de cálculo Express.

  2. Si por manualmente quiere decir que "hoja", como se muestra arriba es un objeto OLE y que está comunicando a través de Automatización OLE a Excel sí mismo, entonces usted debe ser formato de las celdas ya sea individualmente o como un rango, y no la columna objetos. No estoy seguro de cómo los formatos de objeto de columna prevalecerán sobre los valores de celda, si es que lo hacen. El formateo de las celdas generalmente es una cuestión célula por celda, y debe tratarse como tal.

  3. Si realmente desea que esto funcione correctamente, no usará Excel a través de la automatización OLE, obtendrá una biblioteca de escritura con el formato Excel XLS apropiado. Estaba bastante seguro de que podrías obtener los resultados adecuados directamente de la grilla de db CX (DevEx), pero preguntaría en sus foros, no aquí. Con una grilla de base de datos regular, solo usaría TJvDBGridExcelExport que viene en Jedi JVCL, y que funciona con la cuadrícula VCL DB habitual.

4

El problema es que los valores asignados son cadenas Unicode. Pruebe esto:

sheet.Columns[K+2].NumberFormat := AnsiChar('@'); 
sheet.Columns[K+2].NumberFormat := AnsiString('m/d/yyyy'); 
Cuestiones relacionadas