IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Test date provenant d'une cellule Excel


Sujet :

Langage Delphi

  1. #1
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut Test date provenant d'une cellule Excel
    Bonjour !
    En exportant les données d'un fichier excel je voudrais tester une cellule contenant la date si le contenu est bien une date, mais en exécutant pas à pas je me suis aperçu que la valeur passée, malgré que la cellule soit vide est "30/12/1899, donc pour delphi il s'agit bien d'une date. Comment contourner ce problème ?
    Voici le bout de code qui est sensé gérer cette situation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DATE_CURAGE := VarToDateTime(vworksheet.Cells[Ligne, 2]);
          // vérifier si la date est valide
          DecodeDate(DATE_CURAGE, y, m, d);
          if not(IsValidDate(y, m, d)) then
          begin
            Writeln(file_log, Format('STEP %s date <%s> invalide',
                  [NOM_STEP, DATE_CURAGE]));
            inc(ligne);
            Continue;
          end;
    Merci par avance.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 885
    Points : 11 403
    Points
    11 403
    Billets dans le blog
    6
    Par défaut
    en testant que la cellule ne soit pas vide ?

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par Just-Soft Voir le message
    Bonjour !
    En exportant les données d'un fichier excel je voudrais tester une cellule contenant la date si le contenu est bien une date, mais en exécutant pas à pas je me suis aperçu que la valeur passée, malgré que la cellule soit vide est "30/12/1899, donc pour delphi il s'agit bien d'une date. Comment contourner ce problème ?

    Merci par avance.
    Je ne connais rien à Delphi, mais quand Excel met une apostrophe ou des guillemets; c'est une valeur texte. À toi de voir comment Delphi peut aimer, ou non, une date chiffrée formatée en Texte.

    Ceci dit, je me permets d'ajouter quelques informations sur Excel et les dates.

    Pour Excel, une date est essentiellement une valeur numérique.

    La date 1 est le 1er janvier 1900 (Excel pour Windows) ou le 1er janvier 1904 (Excel pour Mac). Ce qui explique le 30-12-1899 en texte.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 885
    Points : 11 403
    Points
    11 403
    Billets dans le blog
    6
    Par défaut
    Autrement dit, le VarToDateTime(cellule vide) semble équivalent à un VarToDateTime(0), nécessitant de tester VarIsNull ou CellIsEmpty (en pseudocode !)

  5. #5
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    @clementmarcotte : merci pour les détails et la clarté de l'explication sur excel.
    @tourlourou : effectivement, j'avais besoin de cette info .... grand merci.

    suite à donner après test.

  6. #6
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Bonjour !
    voici le code modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DATE_CURAGE := VarToDateTime(vworksheet.Cells[Ligne, 2]);
          // vérifier si la date est valide
          DecodeDate(DATE_CURAGE, y, m, d);
          if (not(IsValidDate(y, m, d)) or (VarIsNullDate(DATE_CURAGE))
          or (VarIsNull(vworksheet.Cells[Ligne, 2]))) then
          begin
            Writeln(file_log, Format('STEP %s -- date invalide',
                  [NOM_STEP]));
            inc(ligne);
            Continue;
          end;
    mais rien ne se passe, même si la cellule est vide il me donne une date par défaut ?!

Discussions similaires

  1. Récupérer une Date d'une cellule excel
    Par Pynouz dans le forum C#
    Réponses: 3
    Dernier message: 09/08/2011, 15h04
  2. affichage de date dans une cellule Excel
    Par darkspoilt dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/08/2007, 11h41
  3. Affichage d'une cellule excel
    Par cciocc dans le forum ASP
    Réponses: 2
    Dernier message: 17/05/2005, 11h17
  4. Réponses: 4
    Dernier message: 15/04/2005, 16h25
  5. Récupérer la couleur d'une cellule excel par Delphi
    Par teamsebracing dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 05/06/2003, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo