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

C Discussion :

traitement des fichiers excel en C


Sujet :

C

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 59
    Points
    59
    Par défaut traitement des fichiers excel en C
    Bonjour tout le monde,
    J'ai besoin de vos aides SVP.

    Je suis entrain de développer un programme en C qui communique sur le port UART avec une carte électronique pour récupérer des données. En fait ces données doivent passer par des longues formules de conversion.
    Dans un premier temps de mon travail, j'ai réalisé déjà un fichier excel qui traite ces conversion (je l'avait besoin pour une autre tache).

    Donc maintenant je pense que se communiquer avec ce fichier pour envoyer mes données et récupérer par la suite les valeurs converties est plus facile que réaliser ces conversion par des codes en C sachant que comme je vous ai dit les formules sont vraiment très longues. En fait j'ai presque 12 données dont chacune possède une formule de conversion différente donc ça sera un peu long.

    exemple d'une formule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     G28 =((SI(HEXDEC(C28)>16777215;-(SOMME.SERIES(2;0;1;INDIRECT("Feuil2!A1:A"&NBCAR(C28)*4))-HEXDEC(C28)+1);HEXDEC(C28)))*J20*(1+B19/B20))/(B17*B18*2^23)
    Je vous expose mon problème pour me conseiller quoi faire: traiter les fichier excel ou bien réaliser tout en C.


    Merci d'avance

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Chaque formule est une fonction mathématique qui prend un certain nombre de paramêtre: les cases mentionnées.
    Ca correspond à une fonction en C.

    Ne pas passer par un tableur peut permettre d'économiser bien des soucis.

    La principale question à te poser, c'est "est-ce que les formules sont figées?".
    Si c'est le cas, un programme simple sera probablement plus efficace qu'un tableur, car il n'aura pas à charger une interface graphique ou un fichier au format complexe.

    la fonction "indirect" des tableurs est l'équivalent d'un accès à un tableau en C.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Merci pour votre réponse

    La principale question à te poser, c'est "est-ce que les formules sont figées?".
    D'après mes connaissances: la formule est figée si on l'applique sur plusieurs cellules ( j'spr que je dis pas de bêtises) alors que dans mon cas pour chaque données on applique une formule différente.

    Chaque formule est une fonction mathématique qui prend un certain nombre de paramêtre: les cases mentionnées.
    Ca correspond à une fonction en C.
    En fait au début c'est ce que je voulais faire, mais commençons par exemple la conversion Hex en dec, j'avais un soucis. En fait j'arrive pas à le stocker le nombre dec . J'ai commencé par ce petit code qui affiche bien le nombre en décimal mais j'arrive pas à le stocker.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    int V_Hex;
    char 
     
    printf ("donner le nombre en hexa");
    scanf ("%x", &V_Hex);
     
    printf ("le nombre en dec est : %u \n", V_Hex); //IL affiche bien le nombre en dec
     
    sprintf(V_Dec, "%u", V_Hex);
    printf("V_Dec= %s", V_Dec); // Il affiche V_Dec= NULL
     
    return 0;
    }
    Donc je peux pas trouver le problème dans ma fonction .


    Merci

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Par "figée", je voulais dire "ne change pas dans le temps".

    Que fait la formule que tu nous a donnée, précisément? (mon excel rouille un peu)
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Bonjour
    Merci pour votre réponse.

    Que fait la formule que tu nous a donnée, précisément? (mon excel rouille un peu)
    En fait, comme j'ai mentionné je suis entrain de lire les données sur le port(depuis la carte) sui sont des nombres hexadécimal présentant des grandeurs comme puissance, énergie, tension ..
    Ces nombres devront passer par des formules pour trouver la valeur réelle (en décimal quoi ).
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      G28 =((SI(HEXDEC(C28)>16777215;-(SOMME.SERIES(2;0;1;INDIRECT("Feuil2!A1:A"&NBCAR(C28)*4))-HEXDEC(C28)+1);HEXDEC(C28)))*J20*(1+B19/B20))/(B17*B18*2^23)
    présente le tension instantanée stocker dans la cellule G28.
    La cellule C28 présente la valeur du registre reçue(en hexa).
    la dernière partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    J20*(1+B19/B20))/(B17*B18*2^23
    est la formule donnée dont J20, B19 ... sont des résistance, fréquence .. simples à déclarer en C.
    mais reste la partie de la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (SI(HEXDEC(C28)>16777215;-(SOMME.SERIES(2;0;1;INDIRECT("Feuil2!A1:A"&NBCAR(C28)*4))-HEXDEC(C28)+1);HEXDEC(C28))
    que je l'ai récupéré directement d'un ancien travail d'un collègue. En fait elle sert à tester le signe de la valeur du registre. Car d'après le datashhet, les registressont des compteurs ascendants. L'accumulation est signée afin que l'énergie négative soit soustraite de l'énergie positive. Lorsque la puissance mesurée est positive, le registre d'énergie augmente son contenu de 0x00000000 à la valeur maximale, 0xFFFFFFFF, puis il roule de 0xFFFFFFFF à 0x00000000.
    Vice versa, lorsque la puissance est négative, le registre diminue son contenu.
    Ceci est mentionné dans la section 8.4.

    STPM32_STPM33_STPM34-ilovepdf-compressed.pdf

    Vous trouverez aussi un fichier excel pour mieux expliquer

    formule_con.xlsx

    Merci

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Donc, tes formules sont constantes, et tu peux en faire des fonctions C assez facilement.
    Les données qui ne viennent pas de mesures (réglages et autres) sont à lire dans une configuration, et à stocker dans une structure adaptée (que tu créeras)

    Les données venues des mesures sont à lire de manière séquencielle, en traitant chaque "ligne" directement avec les fonctions de calcul.
    Je créerai pour ce faire une structure représentant toutes les mesures à un instant donné.

    Selon que tu as des calculs relatifs à une plage de temps ou non, il pourrait être nécessaire de stocker les dernières mesures.
    Tu pourrais avoir une structure de résultats des calculs, et une fonction générale du type s_resultats calculs(s_mesures const*) (le pointeur étant uniquement là pour ne pas copier les mesures).
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Merci pour votre réponse,
    J'ai commencé à travailler tout en C.

    Donc, tes formules sont constantes, et tu peux en faire des fonctions C assez facilement.
    Mon problème est que j'arrive pas çà bien traduire la partie de la condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (SI(HEXDEC(C28)>16777215;-(SOMME.SERIES(2;0;1;INDIRECT("Feuil2!A1:A"&NBCAR(C28)*4))-HEXDEC(C28)+1);HEXDEC(C28))
    Je sais que je peut remplacer SOMME.SERIES par une série arithmétique. Mais ce que me pose un problème est surtout:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     INDIRECT("Feuil2!A1:A"&NBCAR(C28)*4)
    la fonction "indirect" des tableurs est l'équivalent d'un accès à un tableau en C.
    J'ai cherché sur Google et avec quelques exemple mais ça reste encore pas évident .

    Merci

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    NBCAR est l'équivalent de strlen() et & est la concaténation
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par ternel Voir le message
    NBCAR est l'équivalent de strlen() et & est la concaténation
    C'est la fonction INDIRECT qui me pose le problème .

    Merci

  10. #10
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Elle permet d'accéder à une case à partir de son nom contenu dans une chaine de caractère: C12 et INDIRECT("C12") sont équivalents.
    L'intérêt est de permettre de créer le nom d'une case par un calcul.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par ternel Voir le message
    Elle permet d'accéder à une case à partir de son nom contenu dans une chaine de caractère: C12 et INDIRECT("C12") sont équivalents.
    L'intérêt est de permettre de créer le nom d'une case par un calcul.
    Merci pour votre réponse. c'est ce que j'ai compris. Sauf que quand je fais par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INDIRECT("Feuil2!A1:A"&5)
    cela signifie que je récupère de la feuille 2 le contenu de A1 jusqu'à A5 ?

  12. #12
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Oui. tout a fait.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Traitement des fichiers excel-Talend
    Par Julien1504 dans le forum Développement de jobs
    Réponses: 48
    Dernier message: 05/08/2013, 14h04
  2. DEV-C++ et le traitement des fichiers EXCEL
    Par titos09 dans le forum Dev-C++
    Réponses: 0
    Dernier message: 22/10/2007, 17h11
  3. Réponses: 17
    Dernier message: 20/09/2005, 21h18
  4. Réponses: 1
    Dernier message: 24/07/2005, 22h25
  5. Extraction de données sur des fichiers excel
    Par iupgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 13h53

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