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

MATLAB Discussion :

Excel et MATLAB


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Par défaut Excel et MATLAB
    Bonjour à tous,

    J'aurais besoin d'un petit peu d'aide pour créer un fichier Excel à partir de matlab. J'ai bien entendu lu tout votre tuto sur le sujet mais j'ai quelques points à éclaircir !

    Tout d'abord, voici le programme que j'exécute :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    fid=fopen('045639 T01 02 1028710.txt','r');
    data = strrep(fread(fid, [1 inf], '*char'), ',', '.');
    fclose(fid);
    T = textscan(data,'%f%f%f%f%f%f%f', 'CollectOutput', 1);
    t=0:1:length(T{1}(5:end,1))-1;
    t=t';
    y=[];
    ENERGIE=[];
    RMS=[];
    A=[];
    B=[];
    Tmp=[];
    i=5;
    l=length(Tmp);
    j=1;
    for i=5:1:7
        Tmp=T{1}(5:end,i);
        [A(i) B(i)]=max(Tmp);
        y(i)=max(max(T{1}(5:end,i))).*0.1;
        P1(i)=find(Tmp(B(i)+1:end)<y(i),1,'first');
        P2(i)=find(Tmp(1:B(i))<y(i),1,'last');
        ENERGIE(i)=trapz(Tmp(P2(i):P1(i)+B(i)));
        RMS(i-4)=sqrt(mean(T{1}(P2(i):P1(i)+B(i),i-4).^2));
    end
    La=20*log10(RMS/10^-6);
    Lv=20*log10(RMS/10^-9);
    La(1,4:7)=0;
    Lv(1,4:7)=0;
    DONNEE=[mean(Lv(1:3)),mean(La(1:3)),mean(A(5:7)),mean(ENERGIE(5:7)),max(T{1}(5:end,4))];
    Et ensuite j'ai commencé à faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Excel = actxserver('Excel.Application');
    Workbook = Excel.Workbooks.Add;
    Excel.Visible=true;
    Excel.Worksheets.Item(1).Name='Valeurs Moyennes';
    Excel.Worksheets.Item(2).Name='Valeurs récupérées';
    Excel.Worksheets.Item(3).Name='Graphique';
    Excel.ActiveSheet.Range('B4').Value='Moyenne Lv (dB)';
    Excel.ActiveSheet.Range('C4').Value='Moyenne La (dB)';
    Excel.ActiveSheet.Range('D4').Value='Moyenne Effort Maximal (N)';
    Excel.ActiveSheet.Range('E4').Value='Moyenne Energie Effort (J)';
    Excel.ActiveSheet.Range('F4').Value='Effort Traction Maximal';
    Excel.ActiveSheet.Range('A1').Value='Date';
    Excel.ActiveSheet.Range('A2').Value='Nombre de fichiers';
    Excel.ActiveSheet.Range('A4').Value='OF ou numéro de pièce';
    J'ai donc plusieurs questions, je vous les résume points par points pour être plus compréhensible.

    1) Je n'arrive pas à mettre la date de la création du fichier. J'ai déjà utilisé ceci mais ça ne m'affiche qu'un chiffre du genre "383272,58338":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >> Excel.ActiveSheet.Range('B1').Value=now-datenum('01-Jan-1904 00:00:00');
    2) Comment pourrais-je afficher dans une case du tableau Excel le numéro du fichier .txt, que j'utilise dès le début du code sur cette ligne, automatiquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fid=fopen('045639 T01 02 1028710.txt','r');
    3) Est-ce qu'il est possible de créer un graphique sur Excel (sur cette page précisément : "Excel.Worksheets.Item(3).Name='Graphique'") à partir d'une commande sous matlab et avec des données de matlab ? (plot ?)

    4) J'aimerais que le programme puisse s'exécuter sur plusieurs fichiers .txt à la fois et non pas sur un seul fichier comme il est montré dans le précédent CODE. Je pensais qu'il était possible à ce que le programme puisse carrément prendre tout les fichiers .txt dans un dossier précis et qu'il les passe un par un pour ensuite stocker tous les résultats dans un seul fichier Excel mais je ne sais pas comment m'y prendre ! Ou peut-être, si c'est aussi possible, que l'utilisateur du programme puisse sélectionner lui même les fichiers avant l'exécution du programme grâce à un "message-box" ou quelque chose du genre.

    Voilà j'espère avoir été assez clair !

    En tout cas je remercie ceux qui se pencheront sur mes questions.

    Tom

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par Tom dB Voir le message
    1) Je n'arrive pas à mettre la date de la création du fichier. J'ai déjà utilisé ceci mais ça ne m'affiche qu'un chiffre du genre "383272,58338":
    Voir le code présenté dans ce chapitre : http://briot-jerome.developpez.com/m...-forme/#LIII-C au niveau du commentaire % Mise en forme des cellules contenant les entêtes des dates sous forme de jour.

    Citation Envoyé par Tom dB Voir le message
    2) Comment pourrais-je afficher dans une case du tableau Excel le numéro du fichier .txt, que j'utilise dès le début du code sur cette ligne, automatiquement :
    Il suffit de stocker le nom dans une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    filename = '045639 T01 02 1028710.txt';
    fid=fopen(filename,'r');
    data = strrep(fread(fid, [1 inf], '*char'), ',', '.');
    fclose(fid);
    et d'utiliser ensuite cette variable dans le code d'écriture dans Excel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Excel.ActiveSheet.Range(...).Value = filename;

    Citation Envoyé par Tom dB Voir le message
    3) Est-ce qu'il est possible de créer un graphique sur Excel (sur cette page précisément : "Excel.Worksheets.Item(3).Name='Graphique'") à partir d'une commande sous matlab et avec des données de matlab ? (plot ?)
    Tout est possible... mais ce n'est pas expliqué dans la série de tutoriels car c'est un gros chapitre
    Il faudrait faire une recherche sur ce forum pour voir si ce sujet n'a pas déjà été abordé.

    Citation Envoyé par Tom dB Voir le message
    4) J'aimerais que le programme puisse s'exécuter sur plusieurs fichiers .txt à la fois
    Pour commencer, voir la FAQ : Comment lister les fichiers d'une certaine extension dans un répertoire ?

  3. #3
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    Citation Envoyé par Tom dB Voir le message
    3) Est-ce qu'il est possible de créer un graphique sur Excel (sur cette page précisément : "Excel.Worksheets.Item(3).Name='Graphique'") à partir d'une commande sous matlab et avec des données de matlab ? (plot ?)
    Citation Envoyé par Dut Voir le message
    Tout est possible... mais ce n'est pas expliqué dans la série de tutoriels car c'est un gros chapitre
    Il faudrait faire une recherche sur ce forum pour voir si ce sujet n'a pas déjà été abordé.
    sinon selon tes besoins, il est tout a fait possible de créer un "template", cad un fichier excel vide déjà formaté selon tes besoins, soit :
    - la colonne date au format date
    - un graphique pré définit si la zone de ton graphique est à peu près connue
    - même éventuellement les noms des colonnes dans ton fichier

    ensuite avec les commandes actxserver, tu ouvres ce fichier, tu le sauvegarde sous le nouveau nom souhaité et tu le remplis puis le re sauvegarde

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Par défaut
    Salut ! Merci pour vos réponses !

    J'aurais besoins de quelques précisions par contre.

    Il suffit de stocker le nom dans une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    filename = '045639 T01 02 1028710.txt';
    fid=fopen(filename,'r');
    data = strrep(fread(fid, [1 inf], '*char'), ',', '.');
    fclose(fid);
    et d'utiliser ensuite cette variable dans le code d'écriture dans Excel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Excel.ActiveSheet.Range(...).Value = filename;



    Pour commencer, voir la FAQ : Comment lister les fichiers d'une certaine extension dans un répertoire ?

    J'ai donc fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rep='F:\xxx';
    ext='*.txt';
    chemin=fullfile(rep,ext);
    list=dir(chemin);
    filename=list.name ??
    fid=fopen(filename,'r');
    Je ne sais pas comment m'y prendre pour récupérer ce fichu nom maintenant. Je sais déjà qu'il faut que j'utilise la commande "list.name" pour avoir le nom, mais c'est pour la suite. Comment pourrais-je récupérer juste le nom (sans le .txt à la fin) et aussi avoir le nombre de fichiers que j'ai récupérer (j'ai test lenght, size sans succès comme je pouvais le prévoir), et enfin comment pourrais-je utiliser la commande "list.name" dans mon fopen ? (si je met exactement ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    filename='list.name'; 
    fid=fopen(filename,'r');
    Je ne vais pas ouvrir le fichier avec le véritable nom, mais un fichier inexistant du nom de "list.name" !


    sinon selon tes besoins, il est tout a fait possible de créer un "template", cad un fichier excel vide déjà formaté selon tes besoins, soit :
    - la colonne date au format date
    - un graphique pré définit si la zone de ton graphique est à peu près connue
    - même éventuellement les noms des colonnes dans ton fichier

    ensuite avec les commandes actxserver, tu ouvres ce fichier, tu le sauvegarde sous le nouveau nom souhaité et tu le remplis puis le re sauvegarde
    Ca pourrait être intéressant mais j'aimerais bien connaître l'autre méthode avant
    Vous ne connaissez pas un tuto qui pourrait me renseigner ?

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for n = 1:numel(list)
     
       filename = list(n).name; 
       fid=fopen(filename,'r');
       ...
     
    end
    Pour récupérer uniquement le nom du fichier sans l'extension, utilise la fonction fileparts

    Pour la question sur les graphiques, quel type de graphique souhaiterais-tu voir apparaitre dans Excel ?
    Avec quelles données ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Par défaut
    Je voudrais exactement ce type de graphique (voir jpg joint)

    En abscisse, j'ai juste un vecteur temps allant de 1 jusqu'à X (le nombre de mesures)
    En ordonnée, j'ai un valeur pour chaque fichier .txt.

    Pour le moment je veux en faire deux pour deux valeurs différentes. Chaque fichier comptes une valeur dans chacun des deux tableaux.
    Images attachées Images attachées  

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 85
    Par défaut
    De plus, il me manque plus qu'une ligne qui m'embête dans ma boucle. J'ai déjà fait ce code :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    rep='F:\XXX';
    ext='*.txt';
    chemin=fullfile(rep,ext);
    list=dir(chemin);
    n=1;
    for n=1:numel(list)
        filename=list(n).name;
        fid(n)=fopen(filename,'r');
        data = strrep(fread(fid(n), [1 inf], '*char'), ',', '.'); 
        fclose(fid(n));
        T(n) = textscan(data,'%f%f%f%f%f%f%f', 'CollectOutput', 1);
        t=0:1:length(T{n}(5:end,1))-1;
        t=t';
        i=5;
        for i=5:1:7
            Tmp=T{n}(5:end,i);
            [A(n,i) B(n,i)]=max(Tmp);
            y(n,i)=max(max(T{n}(5:end,i))).*0.1;
            P1(n,i)=find(Tmp(B(n,i)+1:end)<y(n,i),1,'first');
            P2(n,i)=find(Tmp(1:B(n,i))<y(n,i),1,'last');
            ENERGIE(n,i)=trapz(Tmp(P2(n,i):P1(n,i)+B(n,i)));
            RMS(n,i-4)=sqrt(mean(T{n}(P2(n,i):P1(n,i)+B(n,i),i-4).^2));
            La(n,i-4)=20*log10(RMS(n,i-4)/10^-6);
            Lv(n,i-4)=20*log10(RMS(n,i-4)/10^-9);
        end
        La(n,4:7)=0;
        Lv(n,4:7)=0;
        EFFORTT(n)=max(T{n}(5:end,4));
        EFFORTT=EFFORTT';
        DONNEE(n)=[mean(Lv(n,1:3)),mean(La(n,1:3)),mean(A(n,5:7)),mean(ENERGIE(n,5:7)),EFFORTT(n)];
    end
    Cependant j'ai ce message d'erreur à cause de ma dernière ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ???  In an assignment  A(I) = B, the number of elements in B and
     I must be the same.
    Je sais exactement à quoi il correspond mais je n'arrive pas à y remédier !
    J'ai essayer de mettre ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     DONNEE=[mean(Lv(n,1:3)),mean(La(n,1:3)),mean(A(n,5:7)),mean(ENERGIE(n,5:7)),EFFORTT(n)];
    Le code marche mais je n'ai pas du tout la matrice que je veux. Elle ne m'affiche que ma dernière valeur itérative ! (dans mon cas c'est n=2 car je n'ai que 2 fichier .txt dans mon répertoire)
    Pour moi il me parait logique de mettre "(n)" si je veux toutes mes lignes !!!

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/07/2007, 11h38
  2. Problème de version excel sous matlab
    Par mariono dans le forum MATLAB
    Réponses: 1
    Dernier message: 06/07/2007, 12h08
  3. Réponses: 6
    Dernier message: 05/04/2007, 13h45
  4. Peut-on lire un fichier Excel avec MATLAB ?
    Par nico_ippo dans le forum MATLAB
    Réponses: 1
    Dernier message: 05/11/2006, 18h37
  5. Configuration Excel Link MATLAB
    Par Eric06 dans le forum MATLAB
    Réponses: 2
    Dernier message: 13/09/2006, 15h28

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