Verfasst am: 07.01.2011, 16:24
Titel: mehrere excel datein einlesen und daten verarbeiten
Schönen guten Tag.
Ich bin neu hier und auch in Matlab ein Einsteiger.
Ich habe im Studium die Aufgabe bekommen aus mehreren Excel Dateien bestimmte Werte einzulesen und zu verarbeiten. Nun habe ich hier schon ein Algorithmus gefunden der es mir ermöglicht verschieden benannte Excel Dateien einzulesen. Ich habe jetzt aber das Problem das ich nicht weiß wie ich die eingelesenen Daten speichern soll. Ich hab was von einer cell gehört aber habe nix gefunden was mir weiter helfen konnte.
Konkret zu meiner Aufgabe:
Ich muss Messwerte aus mehreren Exceldateien einlesen
daraus weitere Werte berechnen diese dann so speichern
das ich daraus dann ein Höhenlinien-Diagramm plotten kann.
Mein Problem:
Wie kann ich die Werte aus den Exceldateien so Speichern das ich daraus ein Höhenliniendiagramm zeichnen kann?
% Eingabe des Hubvolumens in Liter
VH = input('Wie groß ist das Hubvolumen des Motors in Liter?');
% Eingabe der Kraftstoffdichte in
rohk = input('Wie ist die Dichte des Kraftstoffes?');
% Auswahl des Ordners in dem die Exceldatei liegt path = uigetdir(pwd,'Select Excel directory'); % Pfadangabe der Excelfiles path = [pathfilesep];
file_all = dir(path); % alle Daten im Verzeichniss (Ordner und Files)
file = file_all([file_all.isdir] == 0); % Extraktion der Files
if ~isempty(file)% ist der Ordner leer (bzw. keine Files)? for k = 1:numel(file) [pathstr, name, ext] = fileparts([path file(k).name]); % Fileinformationen ifstrcmp(ext,'.xlsx')% ist die aktuelle file eine Excel-File?, wenn ja-->File einlesen
P{k} = xlsread([path file(k).name]); % Einlesen der Exceldatei
% Spalten auswählen
n = P{k}(k,1); %Drehzahl in 1/min
md = P{k}(k,2); %Drehmoment Nm
t = P{k}(k,3); %Zeitmittel s
vk = P{k}(k,5); %Kraftstoffmenge in ccm
% Berechnung vom Effektiven Mitteldruck pe in bar
pe = (md * 2 * pi)/(VH * 50);
% Berechnung von der Effektiven Leistung Pe in kW
Pe = (md .* n)./9549;
% Berechnung Kraftstoffgewicht in g
mk = rohk * vk;
% Berechnung des Kraftstoffmassenstromes in g/h
mkpunkt = mk./(t./3600);
% Berechnung des spezifischen Kraftstoffverbrauches in g/kWh
be = mkpunkt./Pe;
% P(cellfun(@(x) isempty(x),P)) = []; % entfernen der vordefinierten Zellfelder die leer sind (falls nicht alle Files im Verzeichniss Excel Files waren) % mat = cell2mat(P); % Umwandlung der Cell in eine Matrix (falls erwuenscht)
den Cellarray "P". Dieser enthaelt alle Werte aller Excelfiles, wobei die Werte des 1. Excelfiles in P{1}, die Werte des 2. Excelfilel in P{2} usw abgespeichert sind.
Nun kannst du einfach (wie du es auch schon gemacht hasst) mit P{}() auf Elemente zugreifen.
Ein Cellarray ist prinzipiell eine Matrix die neben numerischen auch andere Datenformate wie z.B. Strings enthalten kann.
Falls du nicht weiter kommst, so gib bitte genau an wo dein Problem liegt, eine ganze Aufgabenstellung aller "das ich daraus dann ein Höhenlinien-Diagramm plotten kann. " ist da eher weniger hilfreich.
Okay mein Problem liegt darin das ich wenn ich das Programm durchlaufen lasse, das er nur aus dem 2. Excelfile die 3. Zeile nimmt und sonst nix. Jedenfalls zeigt er mir nichts anderes in der Workspace an.
Ich brauche "n", "pe" und "be" aber als Wert untereinander in einer Matrix.
Also z.B.
Ich weiß aber nicht wie man das in Matlab programmiert damit diese Struktur entsteht.
Des weiteren würde ich gerne wissen ob man bei der if abfrage auch 2 Dateiendungen abfragen kann da ich gerne .xls und .xlsx einlesen möchte. Ich hab schon versucht mit einem Komma das einzufügen aber bekam ich einen Fehler.
Okay mein Problem liegt darin das ich wenn ich das Programm durchlaufen lasse, das er nur aus dem 2. Excelfile die 3. Zeile nimmt und sonst nix.
Dies kann ich natürlich nur schwer nachvollziehen, ohne dieses spezielle Excelfie zu kennen. Klappt es denn bei den anderen wie gewünscht? Wenn der Aufbau der Daten ("n","pe","be") in dem Excelfile genauso ist wie in deinem vorherigen Post angedeutet, so sollte nach dem Einlesen mittels xlsread ein Cellarray ausgegeben werden, der auch 3 Spalten enthält. Sind die Daten in dieser Form im Excelfile enthalten?
Am besten du liest dir einmal die Hilfe von xlsread genau durch (doc xlsread) und schaust einmal selber woran es vielleicht liegen könnte. Wenn du damit nicht weiter kommst, dann häng dieses eine Excelfile mit an einem Post an, dann kann ich mal schauen woran es liegen könnte.
Die Antwort auf deine 2. Frage ist dies:
Code:
% mit ODER Verknüpfung ifstrcmp(ext,'.xlsx') || strcmp(ext,'.xls')
% mit Cellarray, welches die gesuchten Strings enthält
txt = {'.xlsx','.xls'};
ifsum(strcmp(ext,txt));
Okay mein Problem liegt darin das ich wenn ich das Programm durchlaufen lasse, das er nur aus dem 2. Excelfile die 3. Zeile nimmt und sonst nix.
Dies kann ich natürlich nur schwer nachvollziehen, ohne dieses spezielle Excelfie zu kennen. Klappt es denn bei den anderen wie gewünscht? Wenn der Aufbau der Daten ("n","pe","be") in dem Excelfile genauso ist wie in deinem vorherigen Post angedeutet, so sollte nach dem Einlesen mittels xlsread ein Cellarray ausgegeben werden, der auch 3 Spalten enthält. Sind die Daten in dieser Form im Excelfile enthalten?
Am besten du liest dir einmal die Hilfe von xlsread genau durch (doc xlsread) und schaust einmal selber woran es vielleicht liegen könnte. Wenn du damit nicht weiter kommst, dann häng dieses eine Excelfile mit an einem Post an, dann kann ich mal schauen woran es liegen könnte.
Die Antwort auf deine 2. Frage ist dies:
Code:
% mit ODER Verknüpfung ifstrcmp(ext,'.xlsx') || strcmp(ext,'.xls')
% mit Cellarray, welches die gesuchten Strings enthält
txt = {'.xlsx','.xls'};
ifsum(strcmp(ext,txt));
Okay mein Problem liegt darin das ich wenn ich das Programm durchlaufen lasse, das er nur aus dem 2. Excelfile die 3. Zeile nimmt und sonst nix.
Dann zeige uns die aktuelle Version des Programms doch mal. Wenn wir nur raten, wo Du genau eine Änderung benötigst, wird das kaum helfen.
Zitat:
Des weiteren würde ich gerne wissen ob man bei der if abfrage auch 2 Dateiendungen abfragen kann da ich gerne .xls und .xlsx einlesen möchte. Ich hab schon versucht mit einem Komma das einzufügen aber bekam ich einen Fehler.
Die beste Method um in diesem Forum exakte Hilfe zu bekommen ist es, den genauen Code und eine Kopie der Fehlermeldung zu posten. Du könntest das Komma ja an den unterschiedlichsten Stellen eingefügt haben...
"doc if" erklärt übrigens ein paar mehr Details als "help if". Es lohnt sich im Zweifel beides mal durchzulesen. Wie wäre es mit:
Also die Excel Dateien liest er richtig und komplett ein.
Das Problem ist nur das er die 3 Werte die ich brauche nicht abspeichert bzw ich nicht weiß wie ich die Werte alle in der folgenden Form abspeichern kann. Also Quasi alle Werte zu einer Variable untereinander in einer Matrix um die dann weiter zu verarbeiten.
Wobei der Wert n aus den Tabellen kommt und die andren Werte jeweils berechnet werden müssen.
Zitat:
Dann zeige uns die aktuelle Version des Programms doch mal. Wenn wir nur raten, wo Du genau eine Änderung benötigst, wird das kaum helfen.
Die Aktuelle Version ist die die ich in ersten Artikel gepostet habe.
Ich hänge mal 2 von den benannten Exceldateien an damit man nachvollziehen kann wie diese aufgebaut ist.
also es war WIRKLICH nicht einfach dein Problem zu erkennen, aber nach mehrmaligen lesen aller deiner Posts habe ich nun glaube verstanden was dein Problem ist.
In deinem Code beschreibst du zwar als Kommentar "Spalten auswählen", jedoch greifst du in Wirklichkeit nur auf ein Element von "P" und nicht auf die gesamte Spalte zu!
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.