Verfasst am: 04.01.2011, 17:22
Titel: Popupmenu-String mit Exceldateinamen füllen
Hallo,
ich habe folgendes Problem:
Ich habe in meinem GUI ein Popupmenu erstellt und würde gerne als String verschiedene Excel-Dateinamen anzeigen lassen. Dazu habe ich einen Ordner der später mal eine unbekannte Anzahl an Excel-Dateien enthält (beispielsweise: M1.xls, M2.xls, M3.xls, ... ). In meinem Popupmenu möchte ich gerne diese Dateinamen M1, M2, M3, usw. gerne aufgelistet bekommen.
Gibt es diese Möglichkeit? Wäre sehr dankbar, wenn mir da jemand weiterhelfen könnte
sicher geht das. Ein paar Hinweise:
uigetdir - Wahl des Verzeichnisses
dir('*.xls') - eine Liste der Exceldateien als Struktur
set(... , 'String', ...) - setzt die String-Eigenschaft.
Vielen Dank für die schnelle Antwort Harald!
Habe versucht das nun umzusetzen.
Habe anstelle des "uigetdir" allerdings "cd" verwendet, um kein popupfenster zu erhalten, bei dem der User von Hand das Verzeichnis bestätigen muss.
Leider bin ich dabei auch noch auf das Problem gestoßen, dass sich so eine Struktur nicht direkt durch den set-Befehl als String anzeigen lässt.
Matlab bringt dann den Fehler:
"error: mxArray must be double, char oder cell"
Wie könnte ich denn dafür sorgen, dass er es dennoch macht?
setzt voraus, dass "name" das erste Feld ist. Ich erwarte zwar nicht, dass sich das ändert, aber es ist auch nicht explizit dokumentiert. Ich bin dagegen sicher, dass {d.name} auch auf dem Mac mit Matlab 5.1 korrekt funktioniert.
Ausserdem denke ich grundsätzlich bei jeder Implementierung an die Anwendung auf größere Datensätze: Wenn Dein Ordner 1.000.000 Files enthält, ist {d.name} spürbar schneller als struct2cell(d).
Aber für nicht-pathologische Fälle, bewirken beide Methoden natürlich genau das gleiche.
Ja, ich glaub ich verstehe was du meinst. Werds noch ändern
Mein nächstes Problem ist etwas komplexer. Ich hoff ihr könnt mir auch hier so gut helfen:
Ich habe nun ein Popupmenu bei dem eine undefinierte Anzahl von Dateinamen angezeigt werden. Je nachdem wie viele Excel-Dateien in einem bestimmten Ordner sind.
Mein Ziel ist es nun mit der Callbackfunktion eine dieser Dateien auszuwählen und aus dieser den Wert aus der Zelle A2 auszulesen und ihn "parameter(19)" zu nennen.
Das Problem hierbei ist, dass ich nicht weiß, wie ich Matlab beibringe mir den Wert aus dem richtigen Excelblatt zu liefern. Vor allem weil die Anzahl der "Value" des Popupmenus variiert werden kann.
Ich denke das geht bestimmt irgendwie mit einer for-Schleife, leider scheitert es bei mir an der Umsetzung.
Hat da jemand eine Idee für eine Programmierstruktur?
Das Problem hierbei ist, dass ich nicht weiß, wie ich Matlab beibringe mir den Wert aus dem richtigen Excelblatt zu liefern.
Was meinst Du mit "Blatt"? Haben die Files mehrere Sheets?
Zitat:
Mein Ziel ist es nun mit der Callbackfunktion eine dieser Dateien auszuwählen und aus dieser den Wert aus der Zelle A2 auszulesen und ihn "parameter(19)" zu nennen.
Wo wirst Du "parameter(19)" speichern?
Die Frage ist recht allgemein. Es wäre hilfreich, wenn Du zumindest ein paar Details vorgibst (Source code), damit wir ein paar Dinge auffüllen können. Wenn wir alles erfinden, passt es möglicherweise gar nicht zu Deinem Programm.
Wünschenswert wäre, dass ich nicht den Befehl "cd" verwenden muss, da ich eigentlich im gleichen Verzeichnis bleiben will und nur die Daten aus einem der Ordner brauche. D.H. der Ordner ist im selben Verzeichnis und trägt den Namen "Motorvolllastkennlinien". Gibt es die Möglichkeit das bei mir genannte "File" irgendwie um "\Motorvollastkennlinie\" zu erweitern?
danke, dachte mir schon dass das irgendwie auch besser geht.
allerdings hab ich bei deiner Umsetzung des Einlesen der Zellen das Problem, dass die Reihenfolge eine andere ist.
Ich würde gern die Parameter der Reihenfolge nach so einlesen:
A1 - B1 - A2 - B2 - A3 - ...
bei deiner Variante sieht es dann allerdings so aus:
A1 - A2 - A3 - ... - A20 - B1 - B2 - ...
Da die Reihenfolge leider relevant ist, kann ich das so nicht umsetzen.
Das mit setappdata, werde ich auch versuchen umzusetzen .
Damit wäre dann erstmal nur noch die Frage offen wie ich in:
data = xlsread(File, 1, 'A1:B20');
den Pfad von "File" um "\Motorvolllastkennlinie\" erweitern kann, damit er im richtigen Ordner die Datei findet. ich hoffe mit dem vorigen Beitrag wird klar was ich mein
Da die Reihenfolge leider relevant ist, kann ich das so nicht umsetzen.
Zum einen: das sollte durch eine geringfügige Modifikation hinzubekommen sein.
Zum anderen: ich habe es an einer Beispieldatei probiert und dieselben Ergebnisse bekommen. Meine Vermutung: das ' nach data ist irgendwie abhanden gekommen.
Der einzige Grund, warum ich mir vorstellen könnte, dass es nicht funktioniert, wären andere Dimensionen des existierenden parameter Vektors, aber da habe ich meine Zweifel.
Zitat:
wie ich den Pfad von "File" um "\Motorvolllastkennlinie\" erweitern kann
Wie gesagt: in der Definition der Variable File den kompletten Pfad angeben.
Am einfachsten wenn auch nicht sonderlich robust:
ich habe ein ähnliches Problem was das Popup Menü betrifft, allerdings helfen mir die gefundenen Lösungsansätze nicht weiter bzw. fällt es mir schwer, diese auf meinen Fall anzuwenden und ich drehe mich hier mittlerweile im Kreis.
Es geht um folgendes:
Ich habe eine Excel-Tabelle, in welcher innerhalb einer Spalte (ab der 3. Zeile) Namen aufgelistet sind. Die Länge der Spalte und damit auch die Anzahl der Namen (sowie die Namen selbst) varriiert von Fall zu Fall. Ich habe im Guide ein Popup Fenster eingefügt und dafür über den Property Inspector eine Callback- und CreateFcn-Verknüpfung zu meiner Matlabfunktion erstellt. Den Tag des Popup habe ich "Lastfall" genannt.
Die Namen aus der Excel-Tabelle lese ich innerhalb der CreateFcn ein:
Code:
function Lastfall_CreateFcn(hObject, eventdata, handles)
function Lastfall_Callback(hObject, eventdata, handles) % Startwert setzen % Pop up Menü get(handles.Lastfall,'String',lc_name);
Value = get(handles.Lastfall,'Value');
n_Lastfall = Value;
Wenn ich dann die Funktion ausführe und sich nach der Berechnung das GUI öffnet, bleibt das Popup Menü allerdings leer. Eine Fehlermeldung erscheint nicht.
Daher nun meine Frage: Weiß jemand, was ich in meiner Umsetzung falsch mache? Ich habe im Property Inspector (des verwendeten Popup) das Feld für String leer gelassen, da sowohl die Namen als auch deren Anzahl wie bereits erwähnt varriiert. Muss in diesem Feld eventl. noch eine Definition eingefügt werden?
Ich hoffe ich konnte mein Problem verständlich erläutern und wäre sehr dankbar, wenn mir hierbei jemand helfen könnte!
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
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.