Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Importar Datos desde Excel (https://www.clubdelphi.com/foros/showthread.php?t=69021)

oscarac 21-07-2010 05:46:39

Importar Datos desde Excel
 
saludos
tengo una consulta
asi me conecto a una hoja de excel
Código Delphi [-]
 cnDatos.Connected := False;
  cnDatos.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
  edtDatos.Text + ';Mode=Read;Extended Properties=Excel 8.0;Persist Security Info=False';
  cnDatos.Connected := True;
el problema que tengo es como identificar el tipo de dato de la celda
porque cuando importo una celda con tipo fecha, no lo reconoce

alguna idea?

oscarac 21-07-2010 08:27:42

me olvide mencionar que las filas del excel no tienen el mismo tipo de datos

ejemplo
Código:

Columna A  Columna B        Columna C
005              01/07/2010        001-0003456
421100              100.00        03/04/2010
421100              200.00        02/04/2010

entonces lo que necesito es identificar la primera linea cabecera (005 .. 01/07/2010) para luego barrer las lineas que estan debajo hasta encontrar una nueva cabecera y generar un archivo de texto
lo que necesito basicamente es poder identificar el tipo de dato, porque si se dan cuenta dentro de una misma columna hay varios tipos de datos... fecha e importes y texto y fechas
espero que puedan entenderme

cloayza 21-07-2010 17:13:36

Primero debes tener claro cuales son los criterios que distinguen los grupos de datos.

Por Ejm:

Si Columna B es una Fecha, comienza un nuevo grupo de datos;

El Codigo podria ser asi:

Código Delphi [-]
Var
   Fecha:TDate;
   fNewGroup:Boolean;
   Valor_1, Valor_A,Valor_C:String;
   Valor_3, Valor_B:TDate;
   Valor_2:Single;
begin
While Not Datos.Eof Do
Begin
       try        
          fNewGroup:=True;
          //Intenta Transformar el contenido de Columna_B a Fecha...
          fecha:=StrToDate(Datos.FieldByName('Columna_B').AsString);
       except
          fNewGroup:=false;
       end;
              
       if fNewGroup then
       begin
            //Procesar Cabezera de grupo       
            Valor_A:=Datos.FieldByName('Columna_A').AsString;
            Valor_B:=Datos.FieldByName('Columna_B').AsDate;
            Valor_C:=Datos.FieldByName('Columna_B').AsString;
       end
       else
       begin
          //Procesar datos del grupo
          Valor_1:=Datos.FieldByName('Columna_A').AsString;
          Valor_2:=Datos.FieldByName('Columna_B').AsFloat;
          Valor_3:=Datos.FieldByName('Columna_B').AsDate;
       end
       Datos.Next;
End;

Espero te sirva...Saludos

oscarac 22-07-2010 08:13:38

he hecho la conexion y cuando lo asocio a una tabla y lo muestro en un Grid
las columnas que tienen como "cabecera" tipos de datos diferentes, la celda que contiene esa cabereca no se muestra mas si los datos del detalle

eso es porque los muestro en el grid?

o puede ser que cuando se "capturän" los datos producto de la conexion, estos conservan su valor y puedo utilizar el ejemplo que me acabas de colocar
es asi?


La franja horaria es GMT +2. Ahora son las 16:59:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi