|
|
Effizientes xlsread für mehrere Sheets einer xls Datei |
|
k@tze |

Forum-Anfänger
|
 |
Beiträge: 29
|
 |
|
 |
Anmeldedatum: 27.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.9.0 R2009b
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 12:37
Titel: Effizientes xlsread für mehrere Sheets einer xls Datei
|
 |
Hallo,
soweit ich weiß wird bei xlsread für jeden Aufruf die Datei geöffnet und danach wieder geschlossen. Dies ist recht zeitaufwendig.
Ich habe eine Exceldatei aus der ich aus zwei Sheets Daten auslesen muss:
Gibt es eine Möglichkeit (abgesehen vom Zusammenfügen der Sheets) beide Sheets in einem xlsread Aufruf einzulesen? Ziel ist es die Laufzeit zu verringern.
Gruß,
k@tze
|
|
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 15:06
Titel:
|
 |
|
|
k@tze |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 29
|
 |
|
 |
Anmeldedatum: 27.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.9.0 R2009b
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 16:13
Titel:
|
 |
Ich denke dein Link mach für mich mehr Sinn. Schon einmal Danke.
Wie habe ich nun diese Zeile zu interpretieren:
Excel.Workbooks.Open('C:\YourAddInFolder\AddInNameWithExtension');
Wie habe ich sie anzupassen?
Die modifizierte Funktion sowie Excel File und m Files sollen alle im gleichen Ordner XYZ liegen, wobei ich den Order XYZ innerhalb meines Netzwerks beliebig verschieben möchte. Geht das?
Also analog zum bisherigen Code bei dem
Gruß,
k@tze
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 16:59
Titel:
|
 |
Zitat: |
Ich denke dein Link mach für mich mehr Sinn. Schon einmal Danke.
Wie habe ich nun diese Zeile zu interpretieren:
Excel.Workbooks.Open('C:\YourAddInFolder\AddInNameWithExtension');
|
steht doch beschrieben, das ist einfach der Pfad zu deinem Excel-Datei, die Funktion macht dann die Excel-Datei auf. Genauer gesagt setzt einen Zeiger darauf.
also so musst diese Funktion dann so aufrufen:
so wird Excel nur einmal aufgemacht.
Zuletzt bearbeitet von denny am 12.01.2011, 17:26, insgesamt einmal bearbeitet
|
|
|
k@tze |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 29
|
 |
|
 |
Anmeldedatum: 27.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.9.0 R2009b
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 17:21
Titel:
|
 |
führt zu
Zitat: |
??? Invoke Error, Dispatch Exception:
Source: Microsoft Office Excel
Description: X.xlsm' wurde nicht gefunden. Überprüfen Sie die Rechtschreibung des
Dateinamens, und überprüfen Sie, ob der Speicherort der Datei korrekt ist.
Wenn Sie versuchen, die Datei über die Liste der zuletzt geöffneten Dateien zu öffnen, stellen
Sie sicher, dass die Datei nicht umbenannt, verschoben oder gelöscht wurde.
Help File: C:\Program Files\Microsoft Office\Office12\1031\XLMAIN11.CHM
Help Context ID: 0
|
Entscheidend ist für mich:
Zitat: |
Die modifizierte Funktion sowie Excel File und m Files sollen alle im gleichen Ordner XYZ liegen, wobei ich den Order XYZ innerhalb meines Netzwerks beliebig verschieben möchte. |
Sprich, ich kann nicht den gesamten Pfad angeben. Matlab soll den Ordner verwenden, der gerade verwendet wird.
|
|
|
k@tze |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 29
|
 |
|
 |
Anmeldedatum: 27.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.9.0 R2009b
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 17:30
Titel:
|
 |
Zitat: |
The first line of code in xlsread1 is
Excel = evalin('base','Excel');
that tries to look for the object Excel in the base workspace.
But, since I instantiated the excel object in my m function, here's the error we met.
You should modify it in
Excel = evalin('caller','Excel');
that tries to look fo the Excel object in the workspace of the caller, where the object exists. |
Das war leider auch nicht von Erfolg gekrönt (gleiche Fehlermeldung).
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 17:37
Titel:
|
 |
Hallo
Zitat: |
Sprich, ich kann nicht den gesamten Pfad angeben. Matlab soll den Ordner verwenden, der gerade verwendet wird. |
das ist kein Problem, das sollte funktionieren. Wenn man nur den Dateinamen eingibt, dann wird danach nur in aktuellen Verzeichnis gesucht.
so hat es bei mir funktioniert:
Ich habe OFFICE 2003. Meine Version kann nicht mit XLSM umgehen.
Was ich fragen, warum XLSM-Extention? hast du OFFICE 2007/2010 auf deinem Rechner?
|
|
|
k@tze |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 29
|
 |
|
 |
Anmeldedatum: 27.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.9.0 R2009b
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 17:49
Titel:
|
 |
Habe exakt den gleichen Code verwendet (und auch die passende xls erstellt), erhalte aber in Zeile drei wieder den Fehler:
Zitat: |
Description: 'my_excel_datei.xls' wurde nicht gefunden. |
Ich nutze Office 2007. xlsm brauche ich für Makros. Ist aber in diesem Fall erstmal irrelevant, da es auch mit xls nicht klappt
Habe übrigens sowohl base als auch caller probiert.
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 17:54
Titel:
|
 |
Hallo
wo liegt deine XLS denn?
was sagt WHICH?
muss PWD entsprechen
|
|
|
k@tze |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 29
|
 |
|
 |
Anmeldedatum: 27.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.9.0 R2009b
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 18:00
Titel:
|
 |
Zitat: |
>> which my_excel_datei.xls
V:\...\Matlab\my_excel_datei.xls
>> pwd
V:\...\Matlab |
"..." ist identisch.
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 13.01.2011, 03:17
Titel:
|
 |
Hallo
habe jetzt auf anderem Rechner ausprobiert mit Office 2007
und ich bekomme die gleiche Fehlermeldung.
Liegt an Excel.Workbooks.Open es brauch absoluten Pfad.
so könntest du das lösen:
|
|
|
k@tze |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 29
|
 |
|
 |
Anmeldedatum: 27.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.9.0 R2009b
|
 |
|
|
 |
|
Verfasst am: 13.01.2011, 11:06
Titel:
|
 |
Absolut, es funktioniert. Die gewünschte Zeiteinsparung wurde erreicht.
Vielen Dank für deine Ausdauer.
Gruß,
k@tze
|
|
|
k@tze |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 29
|
 |
|
 |
Anmeldedatum: 27.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.9.0 R2009b
|
 |
|
|
 |
|
Verfasst am: 27.06.2011, 14:33
Titel:
|
 |
Hallo,
wie damals besprochen kann ich den folgenden Code verwenden.
Ziel war und ist es durch den xlsread1 Befehl gegenüber xlsread Zeit zu sparen. Nun fällt mir auf, dass der Befehl
für dieses File (300KB) ca. 7 Sekunden dauert (und somit auch für die oben genannten Befehle ohne num2) . An einem anderen File (100KB) habe ich ebenfalls die Zeit gemessen (lediglich 1 Sekunde).
Verwende ich hingegen einmalig den xlsread Befehl, so ist der Laufzeitunterschied wesentlich geringer: 1.8 vs. 1.2 Sekunden.
Wie kann das sein? Ein einmaliger Aufruf von xlsread1 inklusive dem Prozedere drum herum entspricht doch genau xlsread. Die Zeitmessung mit dem zweiten File steht dem auch nicht im Widerspruch. Woher kann nun die große Zeitdiskrepanz beim ersten File kommen?
|
|
|
k@tze |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 29
|
 |
|
 |
Anmeldedatum: 27.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.9.0 R2009b
|
 |
|
|
 |
|
Verfasst am: 15.07.2011, 11:28
Titel:
|
 |
Ahnt niemand die Ursache? Das Problem ist noch aktuell.
Gruß,
k@tze
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 15.07.2011, 14:06
Titel:
|
 |
Hallo
Weil du es nur einmal gemessen, dass ist nicht aussagekräftig.
Der Unterschied kann durch vielen Sachen kommen:
1) du hast ja nur leicht XLSREAD abgeändert,
die ganze Überprüfung in der Funktion ist aber geblieben.
So wird bei kleinen Files es besonders bemerkbar, wo das aufmachen des Files nicht mehr relevant wird, aber XLSREAD mehrmalig aufgerufen wird.
2)Jede Funktion hat Eigenverbrauchszeit, also je mehr Funktionen ineinander geschachtelt werden, verbrauchen Zeit um einander aufzurufen.
3)Außerdem müssen m-Files einmalig übersetzt werden, danach werden sie in Speicher gehalten.
4)Es kann auch sein das anderer Prozess zu dem Zeitpunkt Messung verfälscht hat.
Damit du Aussagekräftige Zeitunterschiede hin bekommst, muss du dein Code einige hundert mal ausführen. und am Besten dann Profiler benutzen um den Flaschenhals zu finden.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|