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

Mehrere Excel-files mit Matlab auslesen

 

Dominik

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2010, 13:55     Titel: Mehrere Excel-files mit Matlab auslesen
  Antworten mit Zitat      
Hallo zusammen,
ich würde ger eine bestimmte Zelle aus mehreren Excel Dateien auslesen und bin nicht ganz sicher wie das funktioniert.
Ich schaffe es, aus einer Datei die gewünschte Zelle auszulesen. Das stellt hiermit

num = xlsread('66_2005',4,'D2');

ja kein problem dar. Mein Problem ist nun, dass ich ca. 120 solcher Excel-Dateien habe und aus allen diese eine Zeile gern in einem Vektor zusammenfassen würde. Jedes Dokument hat einen anderen namen (x_2005) wobei x von 66 bis 325 variiert (mit einigen Lücken).
Ist das möglich? Wenn ja, wie? Es muss im nachhinein noch nachvollziehbar bleiben, welcher Wert zu welchen Dokument gehört!
Vielen Dank.
Gruß, Dominik


derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 17.09.2010, 18:09     Titel:
  Antworten mit Zitat      
Hi,

das ist kein Problem. Mit dir den Pfad einlesen, wo die Exceldateien gespeichert sind. Dann in einer For-Schleife den xls-befehl ausführen und dann Ergebnis in einen vorher definierten Vektor speichern. Sag Bescheid wenn du weiter bist und damit Hilfe brauchst.

Grüße

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Dominik

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2010, 09:46     Titel:
  Antworten mit Zitat      
Hallo Oli. Danke für deine schnelle hilfe. das das kein großes problem darstellen sollte hab ich mir schon fast gedacht, bin allerdings noch sehr unwissend im umgang mit matlab. vielleicht kannst du mir ja nen paar gute tutorien empfehlen!?
zu meiner frage:
kannste mir vielleicht einfach mal den code aufschreiben wie du das machen würdest!? hab z.b. das problem das meine for-schleife irgendwie nich so will. weil wenn ich das i ja in den dateinamen einbaue, sprich 'i_2005' iteriert der dieses i ja nicht ne?
vielen dank

Dominik
 
Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 20.09.2010, 12:20     Titel:
  Antworten mit Zitat      
Hi,

Also eine for Schleife in Matlab sieht folgendermaßen aus:

Code:

daten=zeros(100,10)
for k=1:10
  daten(1,k)=xlsread(filename, sheet, 'range')
end
 


Vermeide am besten die i und j als Laufvariablen, da diese für Imaginärteile von komplexen Zahlen stehn.
Die For-Schleife läuft jetzt von 1 bis 10 kannst auch beliebeig erweitert bzw. verkürzen.
Tutorials findest im Netz denk ich genug einfach mal google antreten.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Dominik

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2010, 13:31     Titel:
  Antworten mit Zitat      
Hallo, vielen dank für die Antwort.
Verstehe so schonmal ein Stück mehr.
Leider komme ich immernoch nicht zur gewünschten Lösung meines Problems:
Wenn ich den Code wie genannt eingebe, liest Matlab ja nur aus einer einzelnen excel-file, die ich eben unter 'filename' angebe, die daten aus... (sprich nur den einen Wert den ich auch suche aber eben nur aus dieser Datei)...

Wie kann ich nun so iterieren, dass ich immer wieder eine andere excel-file anspreche und den einen Wert von sheet 4 herausziehen kann (dazu ja die for-schleife an dieser Stelle)? Vielleicht liegt die Lösung auf der Hand aber ich komme grade nicht dahinter Wink.
Die Dateien haben namen wie 66_2005.xls und 110_2005.xls ...

danke
 
Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 20.09.2010, 15:58     Titel:
  Antworten mit Zitat      
Hi,

Schau mal in die Skripecke weiter unten im Forum. Da liegt ein Skript zum einlesen von Dateiennamen aus einem Ordner wenn ich mich nicht täusche.
Bin mir nicht sicher ob das auch für .xls Dateien geht aber versuchen solltest es mal erspart dir dann einiges an Arbeit.

Wie du auf alle Inhalte zugreifst wird am einfachsten über ein Array gehn in dem deine Dateinamen stehn. zB so:
Code:

Dateinamen=['66_2005' '44_2006' '80_1999']
 

Zugreifen auf die einzelnen Dateinamen geht dann wie folgt:
Code:

Dateinamen(1,1) = 66_2005
Dateinamen(1,3) = 80_1999
 


Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Dominik

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2010, 14:50     Titel:
  Antworten mit Zitat      
hmmm. gut, ich habe dann nun einen teil der arbeit erstmal von hand erledigt weil mir das einlesen der dateien nach dem beitrag in der skriptecke auch leider nicht gelingt.
ich habe versucht einen vektor zu erstellen der die lösungen beinhaltet aber wie gesagt bekomme ich es nicht hin die excel-dateinamen zu iterieren. was ich nun mit viel schreibarbeit von hand gemacht habe, müsste aber theoretisch auch von matlab durchführbar sein da es eigentlich eine sehr einfache operation ist. hier mal ein ausschnitt:

P72 = xlsread('72_2006.xls', 4, 'D2');
P73 = xlsread('73_2006.xls', 4, 'D2');
P74 = xlsread('74_2006.xls', 4, 'D2');
P75 = xlsread('75_2006.xls', 4, 'D2');
P76 = xlsread('81_2006.xls', 4, 'D2'); ... usw. für viele dateien.

aus einer masse von messergebnissen sollen halt aus diesen dateien die ergiebigsten herausgesucht werden... sprich, ich muss die ca. 10 höchsten Pxx werte extrahieren. und dann aus diesen excel-dokumenten wieder andere dinge auslesen was dann mit einem solchen befehl machbar sein sollte.
nun, danke erstmal für die hilfe, ich werde dann so mal weiterschauen ob ich das hinbekomme (andererseits bin ich dann wohl schneller wenn ichs von hand mache Wink ). wenn jemand den befehl allerdings parat hat und hier hinschreiben kann hätte ich auch nix dagegen.
vielen dank
gruß
 
Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 21.09.2010, 15:20     Titel:
  Antworten mit Zitat      
HI,

meinst du so?
Code:

daten=cell(100,1);  %Speicher allokieren
for k=1:100
    daten{k,1}=[num2str(k) '_2006.xls'];
end
 

in daten stehn jetzt die ganzen Namen der Exceldateien von 1_2006.xls bis 100_2006.xls. Gibt vl. noch schönere Varianten die schneller sind sichelrich sinnvoll wenn viele dateien öffnen musst.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 21.09.2010, 16:52     Titel:
  Antworten mit Zitat      
Hallo Dominik,

damit du nicht weiter diese Schildbürger treiben musst, habe ich mal ein Script entwickelt, welche innerhalb eines Verzeichnisses alle Excelfiles sucht und diese einliest. Bitteschön:

Code:

path = uigetdir(pwd,'Select Excel directory'); % Pfadangabe der Excelfiles
path = [path filesep];
file_all = dir(path); % alle Daten im Verzeichniss (Ordner und Files)
file = file_all([file_all.isdir] == 0); % Extraktion der Files

P = cell(1,numel(file)); % pre allocation

if ~isempty(file) % ist der Ordner leer (bzw. keine Files)?
    for k = 1:numel(file)
        [pathstr, name, ext] = fileparts([path file(k).name]); % Fileinformationen
        if strcmp(ext,'.xls') % ist die aktuelle file eine Excel-File?, wenn ja-->File einlesen
            P{k} = xlsread([path file(k).name], 4, 'D2'); % Einlesen des Excel Wertes aus Sheet 4 Zelle D2
        end
    end
end

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)
 


Denke das sollte deine Arbeit ein wenig erleichtern Smile.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Dominik

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2010, 12:27     Titel:
  Antworten mit Zitat      
hey vielen dank euch beiden. ich schaue mal wie ich damit klar komme Wink ist ja im endeffekt doch komplexer als ich dachte. muss ich mich wohl noch ne zeit mit matlab beschäftigen damit ich sowas selbst schreiben kann...

dankeschön, bei weiteren fragen meld ich mich gern Wink
 
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.