WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Daten aus Excel in Struct einlesen

 

Huuut

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2011, 09:41     Titel: Daten aus Excel in Struct einlesen
  Antworten mit Zitat      
Hallo ihr Cracks,

ich habe folgendes Problem. Ich habe ein Struct mit 4 Feldern angelegt.
Nun möchte ich jedes dieser Felder mit Daten aus einer Exceltabelle füllen. Die Daten hierfür stehen in Drahtdurchmesser.xls und sind in den Spalten (A2:A101) ... bis ... (D2:D101) eingegeben.
Wie bekomme ich die Daten in mein struct.
Außerdem möchte ich dann später die kompletten Daten eines Feldes in einem PopUp zur Auswahl anbieten.

Ich habe es erst einmal mit dem ersten Feld draht(n).nenn versucht.
Hier der Code:
Code:

function load_draht(anzahl)
    draht = struct ('nenn', 'minZunahme', 'maxDurchm', 'mittlererDurchm');
   
    for(n=2:(anzahl+1))
        range1=('A%g',n);
        d=xlsread('Drahtdurchmesser.xls', 'Tabelle1', char(range1));
        d1=num2str(d);
        draht(n).nenn = input(d1);
    end
   
    for(n=1:anzahl)
        set(handles.Drahtdurchmesser_PopUp,'String',draht(n).nenn);
    end
 


Wo rufe ich dann die Funktion auf? In der OpeningFcn?

Danke schon einmal für eure Hilfe, bin leider blutiger Anfänger in Matlab.

Gruß,
Huuut


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.10.2011, 11:04     Titel: Re: Daten aus Excel in Struct einlesen
  Antworten mit Zitat      
Hallo Huuut,

Es gibt noch einige Probleme in Deinem Code:
Code:
   draht = struct ('nenn', 'minZunahme', 'maxDurchm', 'mittlererDurchm');

Das erzeugt keinen Struct mit 4 Feldern, sondern mit nur 2. Versuche es einfach mal im Command Window.

Der Range muss immer die Form "Start:Ende" haben, auch bei einem einzelnen Feld - siehe "help xlsread".

"range1=('A%g',n);"
Ich nehme an, Du meinst: "range1 = sprintf('A%d', n);". Das "char()" im XLSREAD-Befehl ist unnötig.

"d1=num2str(d); draht(n).nenn = input(d1);"
INPUT ist ein Befehl, siehe "help input". Soweit ich das sehe, ist der hier deplatziert.

Es wäre deutlich schneller, wenn Du den ganzen Block "A2:D101" am Stück ausliest.

"set(handles.Drahtdurchmesser_PopUp,'String',draht(n).nenn);"
Das überschreibt den Inhalt des Popupmenüs immer wieder, und zwar mit Zahlen. Du brauchst aber eine Liste der Zahlen, und zwar als Strings - Cell Strings um genau zu sein.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Huuut

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 10:09     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für deine Hilfe. Tips 1 und 2 hat mir sehr geholfen.
Ich habe aber noch ein Problem damit den kompletten Block einzulesen.

Bei folgendem Code:
Code:
function load_draht(anzahl)
    draht = struct ('nenn', '', 'minZunahme', '', 'maxDurchm', '', 'mittlererDurchm', '');
   
    for(n=2:(anzahl+1))
        range1=sprintf('A2:D3');
        d=xlsread('Drahtdurchmesser.xls', 'Tabelle1', range1);
        d1=num2str(d);
        draht(n).nenn = input(d1);
    end
   
    for(n=1:anzahl)
        set(handles.Drahtdurchmesser_PopUp,'String',draht(n).nenn);
    end

bekomme ich folgende Ausgabe:
Code:
00..001189              00..000044              00..002246           00..002253255

Es sind sozusagen 2 Zahlen vereint worden.

Mit den anderen Tips von dir komme ich leider noch nicht zurecht. Tut mir leid - bin völliger Neuling!

Sprich:
Welcher Befehl außer "input" wäre richtiger?
Und wie mache ich das mit den cell strings?

Vielen vielen Dank schon einmal für deine Hilfe.

MfG
Huuut
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.10.2011, 10:45     Titel:
  Antworten mit Zitat      
Hallo,

schau dir doch auch mal die Dataset Arrays aus der Statistics Toolbox an. Damit kannst du mit einem Befehl direkt aus einer Excel Datei ein dataset array erzeugen, mit dem ähnlich wie mit einer Struktur gearbeitet werden kann.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.10.2011, 10:46     Titel:
  Antworten mit Zitat      
Hallo Huuut,

Das SPRINTF ist hier überflüssig:
Code:
range1 = sprintf('A2:D3');
% Better:
range1 = 'A2:D3';
 


Was soll das INPUT denn erreichen? Ich rate mal, dass es einfach auch überflüssig ist:
Code:
       d1=num2str(d);
        draht(n).nenn = input(d1);
% Better:
        draht(n).nenn = d1;

Das Popup-Menü benötigt einen "cell string", um mehrere Einträge zu haben. Unter dem Stichwort findest Du vieles in der Dokumentation.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.