Verfasst am: 22.10.2016, 22:45
Titel: Excelliste einlesen über Button
Hallo zusammen,
ich brauche eure Hilfe.
Wie kann ich Matlab eine Exceltabelle einlesen lassen über einen Button und wenn der Button nicht benutzt wird das er eine Standard Excelliste aus dem Standard Pfad nimmt für die Berechnung.
Desweiteren finde ich im Netz keine sinnvollen Seiten die Matlab näherbringen außer die tolle Taschenrechnerfunktion. Gibt es irgendwo eine Anlaufstelle mit allen Befehlen die man in der Matlab Programmierung benutzen kann und Beschriftung.
was hast du denn bis jetzt versucht? im fex giebt es gute beispiele zum gui schreiben.
befehle kann man auf der matlab seite nachschlagen oder in der matlab doc selber.
grüße
_________________
Verfasst am: 24.10.2016, 10:18
Titel: Re: Excelliste einlesen über Button
Hallo Lancer,
Zitat:
Wie kann ich Matlab eine Exceltabelle einlesen lassen über einen Button und wenn der Button nicht benutzt wird das er eine Standard Excelliste aus dem Standard Pfad nimmt für die Berechnung.
Die Frage ist zu allgemein um sinnvoll beantwortet werden zu können. Zum Import ist
xlsread
zuständig. Aber wie der "Standard Pfad" und der Button zu impelementierten ist, hängt ganz davon ab, was Du genau brauchst.
Zitat:
Gibt es irgendwo eine Anlaufstelle mit allen Befehlen die man in der Matlab Programmierung benutzen kann und Beschriftung.
Die Getting Startet Kapitel der Dokumentation und Matlabs "Onramp" (Google findet das) bringen einem die Grundlagen schnell näher. Da man kaum mal eben alle Matlab-Befehle anschauen kann, ist es hilfreich sich bei bestimmten Befehlen immer noch die "See also" Tipps anzuschauen, die auf ähnliche Befehle verweisen.
So der User wird wenn ne Vorlage bekommen und diese dann einlesen.
Damit das ding überhaupt funktioniert hab ich eine Exceltabelle schon eingelesen und alle Werte abgespeichert in .MAT files.
Der Code soll beim öffnen des Programmes mit load xxx.mat in den Workplace laden und dann will ich das es selbstständig für j= Januar spalte x bis y ausliest etc. leider kam ich da mit onramp nicht weiter.
Genauso wie er plotten soll X= Uhrzeit und Y=Der Monat der vorher vom User ausgewählt wurde.
Jede variable besitzt 67 Zellen.
Das wäre so das I tüpfelchen im code
Der Code soll beim öffnen des Programmes mit load xxx.mat in den Workplace laden und dann will ich das es selbstständig für j= Januar spalte x bis y ausliest etc.
Darauf kann man kaum konkret antworten. Kannst Du das Problem in Form eine präzisen Frage formulieren? Oft hilft auch einen Code-Abschnitt zu posten.
% --- Executes just before thesiszwei is made visible. function thesiszwei_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to thesiszwei (see VARARGIN)
% Choose default command line output for thesiszwei
handles.output = hObject;
%%% Setzt default Werte beim Starten des Programmes%%% set(handles.Winkel,'String', num2str(90));
set(handles.Wechselrichter,'String', num2str(1));
set(handles.Flaeche,'String', num2str(50));
set(handles.weitererwirkungsgrad,'String',num2str(1));
load Monate.mat load Uhrzeit.mat
% --- Executes on button press in Button2. function Button2_Callback(hObject, eventdata, handles) % hObject handle to Button2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
%Test Feste Variablen
j = 32.9;
f = 52.6;
mae = 105.7;
a = 143.6;
ma = 154.1;
jun = 155.4;
jul = 155.9;
au = 142.3;
s = 112.2;
o = 80.1;
n = 40.4;
d = 28.8;
für die Monate soll aus dem File Monate.mat in dem Matfile befinden sich die Variablen Januar-Dezember mit 67 Zeilen. Die Zeilen soll er alle zusammen addieren für jeweils j f mae etc.
Code:
ifget(handles.Januar,'Value')==1
H = j ;
plot('Zeit,Januar') etc.
für die Monate soll aus dem File Monate.mat in dem Matfile befinden sich die Variablen Januar-Dezember mit 67 Zeilen. Die Zeilen soll er alle zusammen addieren für jeweils j f mae etc.
Huch? Ich verstehe die Sätze inhaltlich nicht. Kannst Du das nochmal in einfacher formulieren?
Zitat:
Code:
ifget(handles.Januar,'Value')==1
H = j ;
plot('Zeit,Januar') etc.
Irgendwie ist da Text abhanden gekommen D:
Da ich gerade nicht am PC bin wo der Code ist versuch ich das mal so.
Also mein Problem ist ich habe diese Daten aus einer Exceltabelle über den Data Import reingeladen (als Script würde ich ja immer den Pfad angeben müssen wo er die Daten herbezieht. richtig?).
Diese Daten sind dann im Workspace gewesen bennant mit Januar Februar März April etc. und da sind Werte hinterlegt gewesen jeweils 67 Zeilen. Soweit so alles noch fein. Da konnte ich die noch auslesen/benutzen mein ich. Da ich aber diese Daten jedes Mal brauch hab ich im comand window mit dem befehl "save" gearbeitet und diese dann in ein MATFILE gepackt. Das selbe Thema bei den Uhrzeiten.
Jetzt existieren folgende Datein in Mathlab Monate.Mat Projekt.fig Projekt.m Uhrzeit.mat.
Jetzt will ich wenn ich das Programm starte in Matlab das er mir die beiden Matfile läd.
Code:
%%% Setzt default Werte beim Starten des Programmes%%% set(handles.Winkel,'String', num2str(90));
set(handles.Wechselrichter,'String', num2str(1));
set(handles.Flaeche,'String', num2str(50));
set(handles.weitererwirkungsgrad,'String',num2str(1));
load Monate.mat load Uhrzeit.mat
Wollte ich so lösen. Klappt aber nicht da er die Werte nicht wieder in den Workplace läd (oder muss er das gar nicht??? Von meiner Sicht müsste er das tun)
Damit ich hier (folgender Code) nicht mehr feste Werte habe sondern diese dann auch sich selbst berechnen wenn ich auf den Button Berechnen drücke.
Code:
%Test Feste Variablen
j = 32.9;
f = 52.6;
mae = 105.7;
a = 143.6;
ma = 154.1;
jun = 155.4;
jul = 155.9;
au = 142.3;
s = 112.2;
o = 80.1;
n = 40.4;
d = 28.8;
Da sollte er (ich weiß da steht nicht beschrieben in welches Feld er plottern soll nennt sich axes) dann den selbst errechneten Wert für J nehmen und dann im Feld axes eine Kurve anzeigen. Auf der X Achse die Zeit auf der Y Achse die Werte wie sie verlaufen.
Aber solange er ja nicht die Datei wieder in den Workplace läd glaub ich wird das in beiden Themen nichts
Wo steht dieser Code?
load
lädt die Inhalte schon in den Workspace, aber in welchen ist hier die Frage. Jede Funktion hat ja ihren eigenen Workspace. Wenn die Daten innerhalb des GUIs verfügbar sein sollen, ist dies besser:
Code:
handles.Monate = load('Monate.mat');
handles.Uhrzeit = load('Uhrzeit.mat');
guidata(handle.Figure, handles); % Oder wie Dein Figure-Handle heißt
Was ist denn "handles.Januar"? Und was soll "plot ('Zeit,Januar')" tun? Wie gesagt ist 'Zeit, Januar' ein String, also ein CHAR-Vector. Wie soll Matlab den denn plotten?
Ich hab es geschafft das Matlab den Code selbst generiert.
Code:
function importfile(Monate,Uhrzeit)
%IMPORTFILE(FILETOREAD1) % Imports data from the specified file % FILETOREAD1: file to read
% Auto-generated by MATLAB on 27-Nov-2016 20:49:08
% Import the file
newData1 = load('-mat', 'Monate.mat');
% Create new variables in the base workspace from those fields.
vars = fieldnames(newData1);
for i = 1:length(vars) assignin('base', vars{i}, newData1.(vars{i}));
end % Import the file
newData2 = load('-mat', 'Uhrzeit.mat');
% Create new variables in the base workspace from those fields.
vars = fieldnames(newData2);
for i = 1:length(vars) assignin('base', vars{i}, newData2.(vars{i}));
Ok da hab ich jetzt die Lösung einfach run importfile.m
Jetzt stehe ich vor dem letzten großem Problem.
Die Daten welche in der Variable Januar gespeichert sind sollen für den Plot jeweils durch eine Formal laufen und dann am Schluss geplottet werden.
Hab mir überlegt die Werte durch eine Schleife berechnen zu lassen.
Da steig ich aber noch nicht hinter wie ich das Richtig löse.
Das ferngesteuert Erzeugen von Variablen im Base-Workspace ist eine Programmier-Technik, die den Code schwer durchschaubar macht. Deshalb ist der code später schwer zu debuggen und noch schwerer zu erweitern. Man kann im CommandWindow nicht mehr kontrollieren, woher die Daten stammen.
Zitat:
Hab mir überlegt die Werte durch eine Schleife berechnen zu lassen.
Da steig ich aber noch nicht hinter wie ich das Richtig löse.
Darauf kann man nichts konkretes antworten. Probiere es einfach mal und öffne einen neuen Thread für eine neue Frage. Stelle die Frage dann so konkret wir möglich.
Gruß, Jan
Einstellungen und Berechtigungen
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.