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

Mit Matlab mehrere Excel-Sheets auf einmal aufrufen.

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2010, 11:11     Titel: Mit Matlab mehrere Excel-Sheets auf einmal aufrufen.
  Antworten mit Zitat      
Hallo! Ich hoffe ihr könnt mir bei folgendem Problem helfen.

Ich habe ein Matlab-Code in dem ein Excel-Sheet aufgerufen wird und die Daten in einer Formel benutzt werden. Das mache ich mit:

a=xlsread('Dateriname.xls', sheet);

Falls ich ein anderes Sheet brauche gebe ich die entsprechende Zahl ein.

Nun aber habe ich eine Excel Datei mit X-beliebigen Sheets und ich möchte alle Sheets abrufen?!?! Kann ich dabei für 'sheet' eine Variable angeben, dh:

for anzahl 'i' in Excel; % schleife soll enden, wenn alle i (anzahl der sheets) abgerufen
a=xlsread('Dateriname.xls', 'i' );
....
end;

hoffe ich konnt e mich ausdrücken:)
danke im vorraus!!!


ISI-Praktikant
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 09.11.09
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 15.06.2010, 09:49     Titel:
  Antworten mit Zitat      
Hallo auch von meiner Seite,

ich habe ein ganz ähnliches Problem.

Ich möchte eine Reihe von Exceldateien über eine for-Schleife in MatLab laden, die Dateien unterscheiden sich lediglich durch eine Ziffer.

Datei 1
Datei 2
Datei 3
usw.

einlesen tue ich über den Befehl:
Code:
Data1 = xlsread('Datei1.xlsx');

und bis hier hin funktioniert es auch noch ganz gut.

Jetzt aber zur Schleife,
dies ist mein Ansatz:
Code:

for k=1:3
Data[k] = ['Datei',k,'.xlsx', k]
end
 


Ich denke es sind zwei Dinge die nicht funktionieren, wie füge ich die Laufvariable der Scheife mit in meinen String ein?
Und wie speicher ich das in einem Arry ab. Alternativ muss es auch kein Arry sein sondern könnte immer wieder eine neue Variable sein (Data1, Data2, Data3, ...)


auch ich hoffe wie "Gast" auf Hilfe,
vielen Dank im vorraus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 15.06.2010, 10:15     Titel:
  Antworten mit Zitat      
Hallo Gast,

das kannst du natürlich schon machen. wenn die dimentionen in den verschiedenen sheets gleich sind dann geht so z.b:
Code:

 for i=k:2
a(:,:,k)=xlsread(file,k);
end
 


ansonsten:
Code:

 for i=1:2
a{k,:}=xlsread(file,k);
end


in a{1},a{2} sind dann deine daten...

gruss
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 15.06.2010, 10:22     Titel:
  Antworten mit Zitat      
hi ISI-Praktikant

mir fällt das hier ein:
Code:


for i=1:3
file=['Data' num2str(i) '.xls'];
A(:,:,i)=xlsread(file)             %jenachdem was du für daten hast
.
.
.
end

gruss
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2010, 10:33     Titel:
  Antworten mit Zitat      
Hallo,

noch eine kleine Anmerkung: wenn Du wissen willst, wieviele Sheets überhaupt in der Datei sind, kannst Du folgendes machen:

Code:

[typ, desc] = xlsfinfo(filename)
numSheets = length(desc);  % Anzahl Arbeitsblätter
 


desc enthält dann die Namen der Arbeitsblätter.

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
ISI-Praktikant
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 09.11.09
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 15.06.2010, 11:03     Titel:
  Antworten mit Zitat      
Hallo jawad1908,

das war genau das was ich gesucht habe,
Besten Dank!

"num2str" ist sehr hilfreich, der Code macht genau das was ich möchte, deine erste Anwort für Gast hat mich auch auf die Idee gebracht alle Daten in unterschiedlichen Sheeds zuspeichern und nicht in immer neuen Dateien.
Das macht den "currend Folder" deutlich übersichtlicher.

auch Dank an LittleX,
vielleicht wird es noch wichtig dem Programm sagen zukönnen wieviele Sheeds man überhaupt hat.

Viele Grüße aus Karlsruhe
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2010, 09:07     Titel:
  Antworten mit Zitat      
Hallo, danke erstmal für die antworten.

@littlex, das hat prima geklappt...

nur habe ich folgendes problem:
ich lese aus einem sheet einen bestimmten range aus. dafür gebe ich folgendes ein

data =xlsread('filename.xls', 1, 'A1:D56566');

So, jetzt habe ich aber eine unbekannte Zeilenanzahl. Wie kann ich die Zahl 56566 (habe ich eingegeben das sicherheitshalber alles ausgelesen wird) ersetzen, damit da ne Variable steht und der automatisch mir bis zu letzten Zeile ausließt??
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2010, 10:28     Titel:
  Antworten mit Zitat      
Hallo,

wenn Du den Range weglässt, wird das ganze Arbeitsblatt eingelesen.

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2010, 10:52     Titel:
  Antworten mit Zitat      
Das soll es in dem Fall auch nicht, das ges Arbeitsblatt einlesen.

Statt zB A1:D56566, nur A1:D500, da nur insg 500 Zeilen enthalten sind?!?

oder anderes bsp: statt X40:X56566, nur X40:X(end), da die gewünschten Daten in Zeile 40 bis 'end' enthalten sind?!?

Danke im vorraus!
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 23.06.2010, 11:23     Titel:
  Antworten mit Zitat      
Hi,
so vielleicht?

Code:

variable=150;
eval(sprintf('data =xlsread(''filename.xls'', 1, ''A1:D%g'')',variable))
 

_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2010, 12:57     Titel:
  Antworten mit Zitat      
hi, nicht ganz...

data =xlsread('filename.xls', 1, 'A1:D_unbekannt') dh, matlab soll selbst schauen, wieviele Zeilen vorhanden sind?!!? und diese Zahl bei unbekannt einsetzen...
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 23.06.2010, 13:22     Titel:
  Antworten mit Zitat      
wenn die anzahl der zeilen die gelesen werden müssen von irgendwas abhängt, dann ist die variante die ich dir gezeigt habe eine lösung.

und wenn matlab sowieso alle vorhandenen zeilen lesen soll, dann machst du wie LittleX sagte, range gar nicht mal angeben.

oder verstehe ich irgendwas falsch??
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2010, 15:36     Titel:
  Antworten mit Zitat      
beides stimmt keine Frage, ich glaube ich konnte mich nicht ausdrücken.

Also, die Daten die ich aus Excel brauche seien in den Spalten B bis F, beginnend in der Zeile 10. Angenommen es existieren 20 Zeilen, dann würde ich schreiben:

data =xlsread('filename.xls', 1, 'B10:F30'); oder?

So, nun möchte ich aber keine fixe Zeilenzahl angeben (30), sondern der soll mir bis zur letzten Zeile(das könnte auch F11 oder aber auch F356 sein) die Werte auslesen!?!
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2010, 17:09     Titel:
  Antworten mit Zitat      
Hallo,

einen direkten Weg wüsste ich nicht.

Entweder liest Du die gewüschten Spalten komplett ein und kürzt sie in MATLAB:

Code:

data = xlsread('myfile.xls',1,'C:F');
data = data(10:end,:);
 


Oder Du vergnügst Dich mit activeX (ziemlich viel Aufwand für eine Zahl):

Code:

excelHandle = actxserver('Excel.Application');
wb = excelHandle.Workbooks.Open('C:\myfile.xls');
numRows = wb.Sheets.Item(1).UsedRange.Rows.Count
excelHandle.Quit
delete(excelHandle)
 


Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
NickNack
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.03.16
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 19.03.2016, 18:33     Titel: Ähnliches Problem mit Einlesen von Excelfiles
  Antworten mit Zitat      
Hallo Leute,

ich habe als relativ frisch gebackener Matlab-Neuling ein Problem, bei dem ich nicht so richtig voran komme. Ich habe schon einige verwandte Themen gelesen, aber für meinen konkreten Fall konnte ich mir noch keine Lösung zusammenbasteln.

Folgendes ist meine Ausgangssituation:

Ich habe einige Excel-Files mit fortlaufender Nummerierung, z.B.:

File1: 1_Restlicher_Name
File2: 2_Restlicher_Name
.
.
.

Jede einzelne dieser Files ist immer exakt gleich aufgebaut und enthält immer gleich viele Sheets.

Mich interessieren nun die Daten einer jeder File, die immer ab dem 2. Sheet in allen folgenden Sheets immer in den gleichen 2 Zeilen der Sheets stehen. Die Daten sollten nach Möglichkeit gespeichert werden, sodass ich sie im weiteren Verlauf des Programms verarbeiten kann.

Habt ihr Ideen oder Anregungen, wie ich vorgehen könnte um die Sheets auch auszulesen?
Ein Weiteres Problem ist, dass ich A im Workspace nicht anschauen kann, wegen folgender Fehlermeldung: Cannot display summaries of variables with more than 524288 elements.


Mein Ansatz um die Files einzulesen ist der von Fourier:

Code:


for i=1:3                 %zum Beispiel bei 3 Files
file=[num2str(i) '_Restlicher_Name' '.xls'];
A(:,:,i)=xlsread(file)

end

 



Gruß

NickNack
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.