Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Importar hojas Excel (https://www.clubdelphi.com/foros/showthread.php?t=82466)

joseprad 09-03-2013 17:07:46

Importar hojas Excel
 
Hola amigos:

Estoy trabajando con importación de datos de hojas excel, concretamente se trata de importar los datos de hojas de calculo de diferentes proveedores a una base de datos de Sql Server.

Estoy utilizado componentes ADO, y para evitar que tengan duplicados (que me los he encontrado), los inserto primero en un TstringList.Sorted lo cual me funciona bien, a continuación los guardo en la tabla de la base de datos.

Hasta aqui todo muy bien, el problema lo ha encontrado en una hoja que, supongo por el formato de la columna, que esta centrado, solo puedo leer los campos que empiezan por una letra.

Para probar si era el formato, lo he quitado y ahora solo me lee los campos que empiezan por numeros.

El codigo es el siguiente:

Código Delphi [-]
 LlistaCamps := TStringList.Create;
  // ---Creamos Sorted para que no guarde duplicados---
  LlistaCamps.Sorted := True;
  with FxEx.dsFulla do begin
    FxEx.dsFulla.CommandText := cboFulles.Value; //--Nombre de la hoja
    FxEx.dsFulla.Active := True;
    First;
    // ---Cargamos la StringGrid sin duplicados-----
      while not eof do begin
   // --- Salta se el precio esta a cero------------------
        if (FieldByName('Preu').AsString = '') or
          (FieldByName('Preu').AsInteger = 0) then
          Next
        else begin
          Camps := Tcamps.Create; //---Creamos una clase para guardar los datos
          Camps.Codi := FieldByName('Codi').AsString;
          Camps.Descripcio := FieldByName('Descripcio').AsString;
          Camps.Preu := FieldByName('Preu').AsFloat;
          if FieldByName('TassaRaee').AsString = '' then
            Camps.TassaRaee := 0
          else
            Camps.TassaRaee := FieldByName('TassaRaee').AsFloat;
          Camps.CodiBarres := FieldByName('CodiBarres').AsString;
          LlistaCamps.AddObject(FieldByName('Codi').AsString, Camps);
          LlistaCamps.Add(FieldByName('Codi').AsString);
          Next;
        end;
      end;

Estoy trabajando con Delphi 2010 y Windows 7.

Alguien sabe como podría limpiar los caracteres raros que pueda tener el campo Codi, ya que como no me los lee se quedan en blanco y si hay mas de uno los filtra como duplicados.

Muchas gracia por anticipado

nlsgarcia 09-03-2013 19:57:46

joseprad,

Cita:

Empezado por joseprad
...como podría limpiar los caracteres raros que pueda tener el campo Codi...

Revisa este código
Código Delphi [-]
function ValidChar(s : string) : String;
var
   i : Integer;
begin
   for i := 1 to Length(s) do
   begin
      if s[i] in ['a'..'z', 'A'..'Z', '0'..'9', ' '] then
         Result := Result + s[i];
   end;
end;
El código anterior filtra los caracteres que no estén en el conjunto de validación, el cual es extensible a otros caracteres que se requieran validar.

Se puede implementar en tu aplicación de la siguiente forma:
Código Delphi [-]
    Camps.Codi := ValidChar(FieldByName('Codi').AsString);
Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 19:03:13.

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