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

schnellste Möglichkeit um Exceldateien einzulesen

 

programmierferkel
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 02.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2012, 19:48     Titel: schnellste Möglichkeit um Exceldateien einzulesen
  Antworten mit Zitat      
Hallo liebe Leute,

ich wollte mal so fragen, was denn die schnellste Möglichkeit ist um in Matlab Exceldateien einzlesen. Es gibt ja z.b. den Befehl xlsread, aber für meine Anwendung, eine Tabelle mit ungefähr 40.000 x 5 Einträgen, ist die Funktion xlsread schon relativ langsam.

Gibt es andere Möglichkeiten auser xlsread um die Daten schneller einzulesen?

auf Anworten freut sich: Ferkel
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.01.2012, 21:15     Titel:
  Antworten mit Zitat      
Hallo,

"relativ langsam" ist eine sehr relative Aussage Wink Sind es mehr als 2s?

ich habe das mal getestet: bei mir unterscheiden sich die Einlese-Zeiten für 400 Zeilen und 40000 Zeilen nur geringfügig. Bei Excel-Dateien benötigt meiner Erfahrung nach das Starten des Excel-Prozesses und das Öffnen der Datei die meiste Zeit.

Im Zweifel kann man immer auf File Exchange schauen, ob dort für spezielle Zwecke bessere Anwendungen zur Verfügung stehen - hier findet man z.B.
http://www.mathworks.com/matlabcent.....-for-faster-data-transfer

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
programmierferkel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 02.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2012, 21:46     Titel:
  Antworten mit Zitat      
Hi Harald,

Ich habe ein Excelfile, das aus 5 Tabellenblättern besteht. Jedes Blatt enthält ca. 40.000x5 Zellen.
Wenn ich z.b. das erste Blatt einlese benötige ich ca. 6s. Was ich aber will ist, jedes Blatt einlesen und überprüfen ob die Blätter sinnvolle Daten enthalten.
Für die fünf Blätter dauert das ca. 20s... was ich als relativ lange empfinde Laughing (im schlimmsten Fall werden das 30 Blätter, für jeden Tag im Monat-dann vielleicht bis zu 1min warten?) .

Das mit dem File exchange verstehe ich auf Anhieb nicht. Ich schaus mir mal genauer an, aber ich will eigentlich keine Daten austauschen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.01.2012, 23:07     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Was ich aber will ist, jedes Blatt einlesen und überprüfen ob die Blätter sinnvolle Daten enthalten.

Gerade da könnte der Link nützlich sein, da Excel so nicht jedes Mal neu gestartet wird.

Zitat:
überprüfen ob die Blätter sinnvolle Daten enthalten.

Was sind sinnvolle Daten?

Zitat:
Für die fünf Blätter dauert das ca. 20s... was ich als relativ lange empfinde (im schlimmsten Fall werden das 30 Blätter, für jeden Tag im Monat-dann vielleicht bis zu 1min warten?) .

1 Minute? Kaffee holen, fertig. - Mit MATLAB werden auch Simulationen durchgeführt, die über mehrere Tage laufen.

File Exchange ist eine Plattform, auf der MATLAB-Nutzer ihre Dateien zur Verfügung stellen und andere sie herunterladen können. Im weitesten Sinne ein Newsgroup.
http://www.mathworks.com/matlabcentral/fileexchange/

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin1986
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 20.06.11
Wohnort: ---
Version: Win 2016b Linux 2016b
     Beitrag Verfasst am: 08.01.2012, 15:49     Titel:
  Antworten mit Zitat      
wie schon gesagt das sollte dein Problem beheben
http://www.mathworks.com/matlabcent.....-for-faster-data-transfer
wenn du eine function hast und kein script hast
must du
Code:
Excel = evalin('base','Excel'); % added command (Brandao 12/09/2008)

in
Code:
Excel = evalin('caller'','Excel');

ändern dann sparst du dir das matlab den excel com server 4mal umsonst startet und schließt, die datei 4 umsonst öffnet speichert und schließt....
Private Nachricht senden Benutzer-Profile anzeigen
 
programmierferkel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 02.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2012, 19:54     Titel:
  Antworten mit Zitat      
Hallo!

Danke für den File Exchange tip, ich habe dort schon zwei hilfreiche Plotfunktionen gefunden.

Wie auch immer, xlsread1, die Funktion von

http://www.mathworks.com/matlabcent.....-for-faster-data-transfer

funktioniert leider nicht bei mir. Ich bekomme den Fehler:

??? Error using ==> evalin
Undefined function or variable 'Excel'.


Den Fehler hab ich auch wenn ich

Code:

    Excel = evalin('base','Excel');
 


durch

Code:

    Excel = evalin('caller','Excel');
 


ersetze. Auch wenn ich einfach im Workspace Excel eingebe bekomme ich den Fehler.

Ich habe jetzt auch versucht xlsread1 mit Hilfe einer Funktion aufzurufen. Funktioniert auch nicht. Also weder von WS und Funktion mit 'base' oder 'caller' aufrufen -> klappt nicht.

Weiß vielleicht jemand eine Lösung. Falls das was hilft ich habe Excel 2007 und Matlab 2011a.

Zuletzt bearbeitet von programmierferkel am 10.01.2012, 20:10, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.01.2012, 20:10     Titel:
  Antworten mit Zitat      
Hallo,

in dem Description-Abschnitt des Links steht beschrieben, was du der Reihe machen musst: du musst selber erst eine Verbindung zu Excel aufbauen und das Excel Sheet öffnen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin1986
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 20.06.11
Wohnort: ---
Version: Win 2016b Linux 2016b
     Beitrag Verfasst am: 10.01.2012, 22:19     Titel:
  Antworten mit Zitat      
was aber auch auf der seite so steht okay in englisch aber naja...
Code:

%hier holst du dir den File name

%dann startest du einen einen EXCEL.Com Server
Excel = actxserver ('Excel.Application');
Excel.Workbooks.Open('C:\YourAddInFolder\AddInNameWithExtension');
Excel.Workbooks.Item('AddInNameWithExtension').RunAutoMacros(1);
File='C:\YourFileFolder\FileName';
if ~exist(File,'file')
    ExcelWorkbook = Excel.Workbooks.Add;
    ExcelWorkbook.SaveAs(File,1);
    ExcelWorkbook.Close(false);
end
Excel.Workbooks.Open(File);

%hier kannst du nun den befehl nutzen

%hier schließt du die datei speicherst und schließt den server
Excel.ActiveWorkbook.Save;
Excel.Quit
Excel.delete
clear Excel
 
Private Nachricht senden Benutzer-Profile anzeigen
 
programmierferkel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 02.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2012, 23:20     Titel:
  Antworten mit Zitat      
Hi Martin und Harald!

Vielen, vielen Dank. Ich hab das irgendwie übersehen. Ich hab mir zwei andere Sachen von File Exchange heruntergeladen bei denen die Funktionen von sich aus auf Anhieb funktioniert haben. Deshalb hab ich nur in den Kommentaren nach Fehlerlösungen gesucht... Rolling Eyes Rolling Eyes

Auf jedenfall funzts jetzt und mein Code ist vier Mal schneller als vorher. -> 8 stat 32 Sekunden Cool

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin1986
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 20.06.11
Wohnort: ---
Version: Win 2016b Linux 2016b
     Beitrag Verfasst am: 10.01.2012, 23:23     Titel:
  Antworten mit Zitat      
Noch mal als allgemeien Tip wenn einem das Programm zulangsam ist, bietet sich auch immer die nutzung des Profilers an, da kann man meistens dann schon sehen wer einem da die Zeit klaut.
Private Nachricht senden Benutzer-Profile anzeigen
 
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.