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 304
    Points
    2 304
    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.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 859
    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 859
    Points : 11 307
    Points
    11 307
    Billets dans le blog
    6
    Par défaut
    en testant que la cellule ne soit pas vide ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Inactif  

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    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.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 859
    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 859
    Points : 11 307
    Points
    11 307
    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 !)
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  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 304
    Points
    2 304
    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.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  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 304
    Points
    2 304
    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 ?!
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

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, 14h04
  2. affichage de date dans une cellule Excel
    Par darkspoilt dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/08/2007, 10h41
  3. Affichage d'une cellule excel
    Par cciocc dans le forum ASP
    Réponses: 2
    Dernier message: 17/05/2005, 10h17
  4. Réponses: 4
    Dernier message: 15/04/2005, 15h25
  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, 14h50

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