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 :

Utilisation de xlswrite


Sujet :

MATLAB

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut Utilisation de xlswrite
    Bonjour,

    Je voudrais écrire dans un fichier xls différentes choses mais j'ai énormément de mal. En fait, je fais un code mais je ne parviens pas à faire ce que je veux. Voici d'abord le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    T1='Reflux liquide';
    T1_p='Point';
    T1_o='Ohm';
    rangeT1=strcat('A1:A',num2str(size(T1,1)));
    xlswrite('reflux',T1,'P',rangeT1);
    Avec ce dernier je souhaiterais écrire le contenu de T1, à savoir reflux liquide dans la case A1 du fichier Excell reflux.xls mais ce n'est pas ce qui se produit : de la sorte seul "R" est bien écrit. Utiliser size(T1) au lieu de size(T1,1) ne marche pas. De même je voudrais écrire Point en A3 et B3. Disons que si l'on résoud le cas de T1, il en ira de même pour T1_p et T1_o ; en revanche je voudrais écrire juste en dessous de Point toutes les valeurs d'un certain vecteurs, l'écriture débutant en A4 et se s'achevant à la fin du vecteur en question et cela en colonne, ainsi l'écriture s'arrêtera à A quelque chose. Comment faire ?

    EDIT

    Pour la première partie de ma question, ceci semble fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    T1='Reflux liquide pour Imp1';
    T1_p='Point';
    T1_o='Ohm';
    xlswrite('reflux',{T1},'P','A1');

  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 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    T1 = 'Reflux liquide';
    xlswrite('reflux',{T1},'P','A1');
     
    X = rand(5,1);
    range = strcat('A2:A',num2str(size(X,1)+1));
    xlswrite('reflux',X,'P',range);
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    Effectivement cela marche, merci Dut ! Je pense que cela devrait marcher aussi pour moi mais ce n'est pas le cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    T1='Reflux liquide pour Imp1';
    T1_p='Point';
    T1_o='Ohm';
    rangeL1=strcat('A4:A',num2str(size(valeurs_Imp1_liquide,1)+1));
    xlswrite('reflux_Imp1',{T1},'P','A1');
    xlswrite('reflux_Imp1',{T1_p},'P','A3');
    xlswrite('reflux_Imp1',{T1_o},'P','B3');
    xlswrite('reflux_Imp1',valeurs_Imp1_liquide,'P',rangeL1);
    Ceci ne marche pas, en fait valeurs_Imp1_liquide est de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valeurs_Imp1_liquide=[C1 C2]
    Avec C1 et C2 deux vecteurs en colonne. Ce que je veux c'est donc accéder à toute cette colonne C1 et l'écrire en colonne à partir de A4.

    EDIT:

    En fait je ne crois pas que ma syntaxe soit mauvaise, je viens d'essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    X = [rand(100000,1) rand(100000,1)];
    range = strcat('A4:A',num2str(size(X,1)+1));
    xlswrite('test',X,'P',range);
     
    X = [rand(5,1) rand(5,1)];
    range = strcat('A4:A',num2str(size(X,1)+1));
    xlswrite('test',X,'P',range);
    Le premier code ne marche pas mais le second oui. Serait-ce un problème de taille ? Je reçois en effet l'erreur suivante (valable également pour mon travail sur valeurs_Imp1_liquide) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> xlswrite
    Error: Object returned error code: 0x800A03EC
     
    Error in ==> test_xls at 3
    xlswrite('test',X,'P',range);

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Pour tranferrer une seule colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    T1='Reflux liquide pour Imp1';
    T1_p='Point';
    T1_o='Ohm';
    rangeL1=strcat('A4:A',num2str(size(valeurs_Imp1_liquide,1)+1));
    xlswrite('reflux_Imp1',{T1},'P','A1');
    xlswrite('reflux_Imp1',{T1_p},'P','A3');
    xlswrite('reflux_Imp1',{T1_o},'P','B3');
    xlswrite('reflux_Imp1',valeurs_Imp1_liquide(:,1),'P',rangeL1);
    Pour transférer les deux colonnes simultanément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    T1='Reflux liquide pour Imp1';
    T1_p='Point';
    T1_o='Ohm';
    rangeL1=strcat('A4:B',num2str(size(valeurs_Imp1_liquide,1)+1));
    xlswrite('reflux_Imp1',{T1},'P','A1');
    xlswrite('reflux_Imp1',{T1_p},'P','A3');
    xlswrite('reflux_Imp1',{T1_o},'P','B3');
    xlswrite('reflux_Imp1',valeurs_Imp1_liquide,'P',rangeL1);
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    Bon, Dut malheureusement cela ne marche pas sur mon code et je ne comprends pas pourquoi honnêtement. Aurais-tu l'amabilité de le prendre ci-dessous ainsi que le fichier en PJ, répertoire que tu devras sélectionner. Le programme va te faire tout un tas de chose mais c'est la toute fin qui nous intéresse, l'écriture dans le fichier Excell. Je ne comprend pas pourquoi cela plante, après tout le vecteur valeurs_Imp1_liquide n'as que 80000 x 2 valeurs environs.

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    pathname = uigetdir('C:\MATLAB701\work\IMP\DATA\', 'Pick a Directory');
    nomfichier0=fullfile(pathname,'PhData.int');
    nomfichier1=fullfile(pathname,'Imp1.int');
    nomfichier2=fullfile(pathname,'Imp2.int');
    nomfichier3=fullfile(pathname,'Imp3.int');
    nomfichier4=fullfile(pathname,'Imp4.int');
    nomfichier5=fullfile(pathname,'Imp5.int');
    nomfichier6=fullfile(pathname,'Imp6.int');
    fid0=fopen(nomfichier0);
    fid1=fopen(nomfichier1);
    fid2=fopen(nomfichier2);
    fid3=fopen(nomfichier3);
    fid4=fopen(nomfichier4);
    fid5=fopen(nomfichier5);
    fid6=fopen(nomfichier6);
    valeurs_ph=fread(fid0,'short')/10;
    valeurs_Imp1=fread(fid1,'short');
    valeurs_Imp2=fread(fid2,'short');
    valeurs_Imp3=fread(fid3,'short');
    valeurs_Imp4=fread(fid4,'short');
    valeurs_Imp5=fread(fid5,'short');
    valeurs_Imp6=fread(fid6,'short');
    valeurs_Imp_global=[valeurs_Imp1;valeurs_Imp2;valeurs_Imp3;valeurs_Imp4;valeurs_Imp5;valeurs_Imp6];
     
    %Histogrammes, nombres d'éléments, valeurs centrales et pourcentages
     
    [nelements,xcenter]=hist(valeurs_Imp_global);
    pourcentage=(nelements/sum(nelements))*100;
     
    [nelements_1024,xcenter_1024]=hist(valeurs_Imp_global,1024);
    pourcentage_1024=(nelements_1024/sum(nelements_1024))*100;
     
    [nelements_2048,xcenter_2048]=hist(valeurs_Imp_global,2048);
    pourcentage_2048=(nelements_2048/sum(nelements_2048))*100;
     
    [nelements_4096,xcenter_4096]=hist(valeurs_Imp_global,4096);
    pourcentage_4096=(nelements_4096/sum(nelements_4096))*100;
     
     
    %On cherche à présent à déterminer les différents types de reflux : gazeux,
    %mélange liquide gazeux et liquide. Pour ce faire on utilise une convention
    %décidée lors du stage : on détermine le rectangle dit de base à l'aide de
    %la fonction test_valeur qui le fournit pour une courbe d'impédance donnée.
    %Tous les points d'ordonnée supérieure à 5000 (Ohm) sont ditz gazeux, ceux
    %entre 5000 et le maximum en ordonnée du rectangle de base constituent un
    %mélange liquide gazeux et enfin ceux en dessous sont dits liquides.
     
    %On définit d'abord les rectangles de bases pour les différentes
    %impédances.
     
    y1=test_valeur(valeurs_Imp1);
    y2=test_valeur(valeurs_Imp2);
    y3=test_valeur(valeurs_Imp3);
    y4=test_valeur(valeurs_Imp4);
    y5=test_valeur(valeurs_Imp5);
    y6=test_valeur(valeurs_Imp6);
     
    %Détermination du domaine liquide : on considère toutes les données
    %en-dessous de max(yi) selon l'impédance i regardée.
     
    valeurs_Imp1_liquide=[find(valeurs_Imp1<max(y1)) valeurs_Imp1(find(valeurs_Imp1<max(y1)))];
    valeurs_Imp2_liquide=[find(valeurs_Imp2<max(y2)) valeurs_Imp2(find(valeurs_Imp2<max(y2)))];
    valeurs_Imp3_liquide=[find(valeurs_Imp3<max(y3)) valeurs_Imp3(find(valeurs_Imp3<max(y3)))];
    valeurs_Imp4_liquide=[find(valeurs_Imp4<max(y4)) valeurs_Imp4(find(valeurs_Imp4<max(y4)))];
    valeurs_Imp5_liquide=[find(valeurs_Imp5<max(y5)) valeurs_Imp5(find(valeurs_Imp5<max(y5)))];
    valeurs_Imp6_liquide=[find(valeurs_Imp6<max(y6)) valeurs_Imp6(find(valeurs_Imp6<max(y6)))];
     
    %Détermination du domaine liquide/gazeux : on considère toutes les données
    %entre max(yi) selon l'impédance i regardée et la valeur 5000.
     
    valeurs_Imp1_melange=[find((valeurs_Imp1>=max(y1)) & (valeurs_Imp1<5000)) valeurs_Imp1(find((valeurs_Imp1>=max(y1)) & (valeurs_Imp1<5000)))];
    valeurs_Imp2_melange=[find((valeurs_Imp2>=max(y2)) & (valeurs_Imp2<5000)) valeurs_Imp2(find((valeurs_Imp2>=max(y2)) & (valeurs_Imp2<5000)))];
    valeurs_Imp3_melange=[find((valeurs_Imp3>=max(y3)) & (valeurs_Imp3<5000)) valeurs_Imp3(find((valeurs_Imp3>=max(y3)) & (valeurs_Imp3<5000)))];
    valeurs_Imp4_melange=[find((valeurs_Imp4>=max(y4)) & (valeurs_Imp4<5000)) valeurs_Imp4(find((valeurs_Imp4>=max(y4)) & (valeurs_Imp4<5000)))];
    valeurs_Imp5_melange=[find((valeurs_Imp5>=max(y5)) & (valeurs_Imp5<5000)) valeurs_Imp5(find((valeurs_Imp5>=max(y5)) & (valeurs_Imp5<5000)))];
    valeurs_Imp6_melange=[find((valeurs_Imp6>=max(y6)) & (valeurs_Imp6<5000)) valeurs_Imp6(find((valeurs_Imp6>=max(y6)) & (valeurs_Imp6<5000)))];
     
    %Détermination du domaine gazeux : on stocke dans différents vecteurs les
    %abscisses (points) et les ordonnées (Ohm) correspondants à des ordonnées
    %>=
    %5000.
     
    valeurs_Imp1_gazeux=[find(valeurs_Imp1>=5000) valeurs_Imp1(find(valeurs_Imp1>=5000))];
    valeurs_Imp2_gazeux=[find(valeurs_Imp2>=5000) valeurs_Imp2(find(valeurs_Imp2>=5000))];
    valeurs_Imp3_gazeux=[find(valeurs_Imp3>=5000) valeurs_Imp3(find(valeurs_Imp3>=5000))];
    valeurs_Imp4_gazeux=[find(valeurs_Imp4>=5000) valeurs_Imp4(find(valeurs_Imp4>=5000))];
    valeurs_Imp5_gazeux=[find(valeurs_Imp5>=5000) valeurs_Imp5(find(valeurs_Imp5>=5000))];
    valeurs_Imp6_gazeux=[find(valeurs_Imp6>=5000) valeurs_Imp6(find(valeurs_Imp6>=5000))];
     
    %Tracé des courbes d'impédances séparées
     
    figure(1)
    plot(valeurs_Imp1);
    xlabel('Nombres de points pour 1 Hz');
    ylabel('Valeur Imp1');
    hold on
    plot(y1,'r');
    figure(2)
    plot(valeurs_Imp2);
    xlabel('Nombres de points pour 1 Hz');
    ylabel('Valeur Imp2');
    hold on
    plot(y2,'r');
    figure(3)
    plot(valeurs_Imp3);
    xlabel('Nombres de points pour 1 Hz');
    ylabel('Valeur Imp3');
    hold on
    plot(y3,'r');
    figure(4)
    plot(valeurs_Imp4);
    xlabel('Nombres de points pour 1 Hz');
    ylabel('Valeur Imp4');
    hold on
    plot(y4,'r');
    figure(5)
    plot(valeurs_Imp5);
    xlabel('Nombres de points pour 1 Hz');
    ylabel('Valeur Imp5');
    hold on
    plot(y6,'r');
    figure(6)
    plot(valeurs_Imp6);
    xlabel('Nombres de points pour 1 Hz');
    ylabel('Valeur Imp6');
    hold on
    plot(y6,'r');
     
    %tracé de la courbe d'impédance globale et du pH
     
    figure(7)
    subplot(2,2,1)
    plot(valeurs_Imp_global);
    xlabel('Nombres de points pour 1 Hz');
    ylabel('Valeur Imp_global');
    subplot(2,2,2)
    plot(valeurs_ph,'r');
    xlabel('Nombres de points pour 1 Hz');
    ylabel('Valeur pH');
     
    %Tracé des différents histogrammes
     
    figure(8)
    subplot(2,2,1);
    hist(valeurs_Imp_global);
    title('histogramme standard : découpage en 10');
    subplot(2,2,2);
    hist(valeurs_Imp_global,1024);
    title('histogramme : découpage en 1024');
    subplot(2,2,3);
    hist(valeurs_Imp_global,2048);
    title('histogramme : découpage en 2048');
    subplot(2,2,4);
    hist(valeurs_Imp_global,4096);
    title('histogramme : découpage en 4096');
     
    %Ecriture des données utiles dans des fichier xls
     
    T1='Reflux liquide pour Imp1';
    T1_p='Point';
    T1_o='Ohm';
    rangeL1_p=strcat('A4:A',num2str(size(valeurs_Imp1_liquide,1)+1));
    rangeL1_o=strcat('B4:B',num2str(size(valeurs_Imp1_liquide,2)+1));
    xlswrite('reflux_Imp1',{T1},'P','A1');
    xlswrite('reflux_Imp1',{T1_p},'P','A3');
    xlswrite('reflux_Imp1',{T1_o},'P','B3');
    xlswrite('reflux_Imp1',valeurs_Imp1_liquide(:,1),'P',rangeL1_p);
    xlswrite('reflux_Imp1',valeurs_Imp1_liquide(:,2),'P',rangeL1_o);
     
    % X = [rand(5,1) rand(5,1)];
    % range = strcat('A4:A',num2str(size(X(:,1)+1)));
    % xlswrite('test',X,'P',range);
    Je précise que je veux donc que la colonne 1 de valeurs_Imp1_liquide soit écrite en colonne à partir de A4 vers le bas et de même pour la colonne 2 à partir de B4.

    EDIT:

    Cela semble fonctionner avec cet autre code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    X = [1 2 3 ; 4 5 6]';
    range = strcat('A4:A',num2str(size(X,1)));
    % range_B=strcat('B4:B',num2str(size(X,2)));
    T1='Reflux liquide pour Imp1';
    T1_p='Point';
    T1_o='Ohm';
    xlswrite('test',{T1},'P','A1');
    xlswrite('test',{T1_p},'P','A3');
    xlswrite('test',{T1_o},'P','B3');
    xlswrite('test',X(:,1),'P','A4');
    xlswrite('test',X(:,2),'P','B4');
    Je pense que le problème vient de la définition de valeurs_Imp1_liquide (ligne 61) mais je ne parviens pas à la changer : le vecteur obtneu me convient en fait, en colonne 1 et 2 j'ai exactement les informations dont j'ai besoin...le problème peut aussi venir d'un problème de place car le code ci-dessous fonctionne pour rand(1,8000) mais pas rand(1,8000) pour une raison inconnue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    X = [rand(1,8000) ; rand(1,8000)]';
    range = strcat('A4:A',num2str(size(X,1)));
    % range_B=strcat('B4:B',num2str(size(X,2)));
    T1='Reflux liquide pour Imp1';
    T1_p='Point';
    T1_o='Ohm';
    xlswrite('test',{T1},'P','A1');
    xlswrite('test',{T1_p},'P','A3');
    xlswrite('test',{T1_o},'P','B3');
    xlswrite('test',X(:,1),'P','A4');
    xlswrite('test',X(:,2),'P','B4');
    EDIT 2:

    Finalement je pense que c'est bel et bien la taille des données à écrire qui pose problème dans mon code et après quelques recherches j'ai pu lire que c'est Excell qui pourrait être la cause du problème. Il tolérait l'écriture d'un certain nombre de colonnes, et donc apparemment pas de 80000x2 déjà. Que faire ?
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [Débutant] Utiliser xlswrite sans effacer le contenu
    Par abel413 dans le forum MATLAB
    Réponses: 1
    Dernier message: 25/07/2014, 15h36
  2. Réponses: 6
    Dernier message: 27/10/2008, 11h56
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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