Verfasst am: 21.03.2016, 11:44
Titel: Problem noch immer nicht ganz gelöst
Also, ich habe noch ein wenig recherchiert und bin der Sache schon deutlich näher gekommen
Der Folgende Code liest mir alle Files ein und schreibt die jeweils interessierenden Bereiche von Sheet 2 einer jeder File nebeneinander in die Matrix "mat".
Code:
path = uigetdir(pwd,'Ordner auswählen'); % 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,'.xls')% ist die aktuelle file eine Excel-File?, wenn ja-->File einlesen
P{k} = xlsread([path file(k).name], 2, 'D2:K2'); % Einlesen des Excel Wertes aus Sheet 2 Bereich D2 bis K2 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) -> Schreibt die INtervalle D2:K2 der Sheets nebeneinander.
Das gefällt mir soweit schon richtig gut, nur fehlt mir zu meinem Glück, dass mir das Programm nicht nur für einen Sheet die Daten speichert, sondern, dass es in die Zeilen der Matrix "mat" untereinander die Daten für die einzelnen Sheets schreibt.
Verfasst am: 21.03.2016, 15:56
Titel: Re: Problem noch immer nicht ganz gelöst
Hallo NickNack,
"path" ist ein wichtiger Matlab-Befehl. Ihn mit einer Variablen zu überschreiben ist kein Bug, kann aber beim Debuggen zu sehr unerwartetem Verhalten führen.
Das gefällt mir soweit schon richtig gut, nur fehlt mir zu meinem Glück, dass mir das Programm nicht nur für einen Sheet die Daten speichert, sondern, dass es in die Zeilen der Matrix "mat" untereinander die Daten für die einzelnen Sheets schreibt.
Das verstehe ich noch nicht. In P sind doch die Daten aller Files gespeichert, oder? Warum fehlen die Werte dann in mat?
danke für den Tipp mit
cellfun('isempty', P)
Ich werde es gleich mal ausprobieren (wobei die Zeit eher nebensächlich ist).
Ja, in mat sind die Werte aller Files nacheinander in Zeile eins. Jedoch nur für (im Falle meines Beispieles) für den Sheet 2. Da ich jedoch mehrere Sheets in jeder Excel-File habe, möchte ich gerne die Werte von jedem Sheet in den einzelnen Zeilen Stehen haben...
Im Prinzip so:
Daten aus allen Sheet 1: |D2:K2 File1|D2:K2 File2|...|...|...|...|
Daten aus allen Sheet 2: |D2:K2 File1|D2:K2 File2|...|...|...|...|
Daten aus allen Sheet 3: |D2:K2 File1|D2:K2 File2|...|...|...|...|
Daten aus allen Sheet 4: |D2:K2 File1|D2:K2 File2|...|...|...|...|
usw....
Mit Folgendem Code bekomme ich jetzt soweit ich das sehen kann, mein gewünschtes Ergebnis:
Code:
path = uigetdir(pwd,'Ordner auswählen'); % Pfadangabe der Excelfiles
pathname = uigetdir(pwd,'Ordner auswählen'); % Pfadangabe der Excelfiles % pathname = [pathname, filesep]; Überflüssig, FULLFILE ist besser % Nebenbei könnte der Ordner ja auch "C:\" sein, so dass man da kein \
& anhängen sollte.
file_all = dir(pathname); % alle Daten im Verzeichniss (Ordner und Files)
file = file_all([file_all.isdir] == 0); % Extraktion der Files
P = cell(5, numel(file)); % pre allocation, 5 statt 1 als erste dimension % if ~isempty(file) % Überflüssig. Falls NUMEL(file) == 0, wird die FOR-Schleife % nicht aufgerufen for k = 1:numel(file) [pathstr, name, ext] = fileparts(file(k).name); % Filename ohne [] ifstrcmpi(ext, '.xls')% Case-insensitive
sheet = 1; % Nummer des ersten Sheets for a = sheet:5
P{a,k} = xlsread(fullfile(pathname, file(k).name),a, 'B1:F1'); % Einlesen des Ranges end end end
%P(cellfun('isempty',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)
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.