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

xlswrite Fehlermeldung

 

Clausius_Rankine
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 04.11.13
Wohnort: Oberhausen
Version: R2010b
     Beitrag Verfasst am: 25.11.2013, 15:49     Titel: xlswrite Fehlermeldung
  Antworten mit Zitat      
Hallo zusammen,

ich bin mal wieder total ratlos. Ich möchte, dass am Ende meines Programms, nach erfolgreichem Schleifendurchlauf, das "Ergebnis" Cell-Array in eine Excel Datei exportiert/abgespeichert wird. Das habe ich bisher immer erfolgreich mit dem Befehl xlswrite gemacht.
Nun habe ich mein Programm ein wenig ausgebaut (es ist noch eine äußere Schleife dazu gekommen) wodurch das Cell-Array deutlich größer geworden ist. Das Cell-Array ist Daten = cell(35039,850). Vorher hatte dieser Array lediglich 25 Spalten. Damit hat alles einwandfrei funktioniert. Mit den aktuellen 850 Spalten erhalte ich beim Verwenden von xlswrite ständig die Fehlermeldung:

Code:
??? Error using ==> xlswrite at 213
Error: Für diesen Vorgang ist nicht genügend Speicher verfügbar.

Error in ==> Gebaeudemodell_for_2_1b_auto_Beispiel at 159
xlswrite('Thermisches_Gebaeudemodell_for_2_1b_auto.xlsx',Daten,'Berechnung','A2:AFR35040')


Ich habe das Internet bereits durchforstet und versucht herauszufinden welche Ursache hinter dieser Meldung steckt. Das einzig annähernd gleiche Problem wird in diesem englisch sprachigen Forum diskutiert:

http://www.mathworks.com/matlabcentral/answers/101631

Das einzige was meiner Meinung nach zutreffen könnte wäre die Problematik mit der Spaltenzahl. Ich habe allerdings Excel 2010 und Matlab R2010b installiert. Also sollte ich weit mehr als 256 Spalten mit xlswrite übertragen können.

Ich begreife auch nicht genau was MATLAB mit dem Hinweis "Für diesen Vorgang ist nicht genügend Speicher verfügbar" aussagen möchte? Mein Speicher reicht dafür definitiv aus.

Oder suche ich grad in der komplett falschen Richtung??

Ein lauffähiges Minimalbeispiel habe ich auch hochgeladen.


Vielen Dank und viele Grüße

Stefan

Gebaeudemodell_for_2_1b_auto_Beispiel.m
 Beschreibung:

Download
 Dateiname:  Gebaeudemodell_for_2_1b_auto_Beispiel.m
 Dateigröße:  6.04 KB
 Heruntergeladen:  313 mal
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 25.11.2013, 16:10     Titel:
  Antworten mit Zitat      
Ich denke die richtige Übersetzung is
Code:
Error: Not enough storage is available to complete this operation
. Ich habe hier einen Artikel gefunden der am Schluss Tipps hat:

---------------------

I am trying to execute the following code snippet on MATLAB R2012b 64 bit using 32 bit Excel 2010.

Code:

Function test55
c = cell(10000, 1000);
[nr1, nc1] = size(c);
n = 0;
for i1 = 1 : nr1;
    for i2 = 1 : nc1;
        n = n + 1;
        c{i1, i2} = n;
    end;
end;

fprintf('start\n');
xlswrite('test55-1.xlsx', c);
fprintf('done\n');
return;
 


I get the following error:

Code:

Error using xlswrite (line 220)
Error: Not enough storage is available to complete this operation

Error in test-55 (line 12)
xlswrite('test-55.xlsx' , c);
 


My system has 24 GB RAM and a lot of free memory on my Hard disk as well. The same code works if I reduce the number of colmuns to 990. Also, I tried the same code snippet on a second machine for which it worked without any errors.

I would like to be able to execute the above mentioned code without any errors.

Answer:

This error can be observed if a large amount of data is being written at once to an Excel file using a single XLSWRITE command.

This issue seems to be more related to storage availability and memory allocation taking place within the Excel Application outside the MATLAB environment. It does not relate directly to the large RAM or free disk space availability.

In the above code snippet, around 1.2 GB of data is being written at once to the Excel application.

As a workaround:
1. Try writing the same data in parts (in iterations) by calling XLSWRITE multiple times rather than trying to write the data all at once.
2. Try using 64 bit version of Excel 2010 application.
3. Also try disabling the Excel Add-ins if present and check if it resolves the issue.


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Clausius_Rankine
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 04.11.13
Wohnort: Oberhausen
Version: R2010b
     Beitrag Verfasst am: 25.11.2013, 17:18     Titel:
  Antworten mit Zitat      
Hallo Andreas,

danke für die schnelle Antwort. Der Artikel ist sehr interessant, da es genau mein Problem beschreibt.

Zu den Lösungsvorschlägen des Artikels:

1) Leider arbeite ich hier nicht an meinem eigenen Rechner und habe deshalb nicht die Berechtigung die 64 bit Version von Excel 2010 zu installieren. Derzeit ist die 32 bit Version drauf und das lässt sich leider nicht ändern.

2) Die Add-ins sind bereits alle Inaktiv.

3) Ich habe den xlswrite - Befehl in die äußerste Schleife eingebaut, sodass nicht mehr alles auf einmal in Excel übertragen wird. Auf diese Weise sollte nach jedem Durchlauf der äußeren Schleife (insgesamt 34 mal) mit xlswrite der aktuelle Inhalt des Cell-Array in Excel übertragen werden. D.h. Excel würde 34 mal geöffnet und gespeichert werden, in der Hoffnung, dass Excel mit diesen kleineren Datenmengen besser zurecht kommt.

Aber leider erhalte ich immernoch genau die gleiche Fehlermeldung. Confused

Das muss doch irgendwie funktionieren ?!


Viele Grüße

Stefan
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 25.11.2013, 18:28     Titel:
  Antworten mit Zitat      
hmm irgendwo war doch mal was mit java speicher oder sowas einstellen. der war noch irgendwie nur 64 mb eingestellt .... ich weis net mehr genau. kannst ja mal danach suchen. ich guck selber mal wenn ich was finde meld ich mich. das war hir irgendwo im forum.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 25.11.2013, 21:32     Titel:
  Antworten mit Zitat      
Der default maximum jave heap ist bei Java 1.6 bei 196mb.

Code:
>> java.lang.Runtime.getRuntime.maxMemory


In die Datei $MATLABROOT/bin/$ARCH/java.opts muss man -Xmx1024m für 1024mb schreiben (nur bei Java 1.6). Bei älteren Java Versionan ist das -Xms oder so? Je nach Arbeitsspeicher würde ich es einfach mal auf die hälfte des verfügbaren setzen.

Also

Code:

  f=fopen(sprintf('%s/bin/%s/java.opts',matlabroot,computer('arch')),'w');
  fprintf(f,'-Xmx1024m');
  fclose(f);
 


Und Matlab neustarten. Aber ob es hilft?
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 26.11.2013, 10:30     Titel:
  Antworten mit Zitat      
"Nicht am eigenen Rechner" arbeiten heisst also der Rechner des Betreuers oder ein Laborrechner? Und es iast also ein 64 bit Rechner mit 64 Bit Windows und 64 Bit MATLAB und 32 Bit Office/Excel?

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Clausius_Rankine
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 04.11.13
Wohnort: Oberhausen
Version: R2010b
     Beitrag Verfasst am: 26.11.2013, 12:15     Titel:
  Antworten mit Zitat      
Also die Sache mit dem Java Heap Memory habe ich kurz nochmal recherchiert und auch probiert. Allerdings nicht auf die Weise wie markuman es beschrieben hat, sondern einfach über
File > Preferences > General > Java Heap Memory.

Da kann man dann in dem Kästchen die Heap Memory einstellen. War vorher auf 128 MB und ich hab ihn auf die Hälfte des verfügbaren gesetzt, also auf 1065 MB.

Ich denke mal, damit bewirke ich genau das gleiche wie markuman vorgeschlagen hat ?!

Ich bekomme immernoch die exakt die gleiche Fehlermeldung, allerdings deutlich schneller !! Also wirklich viel schneller. Vorher hat er erstmal 20 min gerechnet bis die Meldung kam und nun dauerts nur noch 2 Minuten Very Happy


Ja genau, so ähnlich. Es ist ein Rechner im Hiwi-Raum des Lehrstuhls und hier kann alles nur über die IT installiert/eingestellt werden.

Richtig, ich hab hier Windows 7 64 bit mit 64 bit MATLAB und 32 bit Excel


Viele Grüße

Stefan
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 26.11.2013, 12:32     Titel:
  Antworten mit Zitat      
Clausius_Rankine hat Folgendes geschrieben:
Also die Sache mit dem Java Heap Memory habe ich kurz nochmal recherchiert und auch probiert. Allerdings nicht auf die Weise wie markuman es beschrieben hat, sondern einfach über
File > Preferences > General > Java Heap Memory.

Da kann man dann in dem Kästchen die Heap Memory einstellen. War vorher auf 128 MB und ich hab ihn auf die Hälfte des verfügbaren gesetzt, also auf 1065 MB.

Ich denke mal, damit bewirke ich genau das gleiche wie markuman vorgeschlagen hat ?!


Vermutlich. Ich benutze die GUI selten Smile
Die Änderung kannst du ja einfach mit >> java.lang.Runtime.getRuntime.maxMemory
überprüfen.
Dann setz die heap size doch einfach mal auf das Maximum. Wobei ich über die Datei auch einen größeren heap einstellen kann als Matlab vorgibt.
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Clausius_Rankine
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 04.11.13
Wohnort: Oberhausen
Version: R2010b
     Beitrag Verfasst am: 26.11.2013, 16:22     Titel:
  Antworten mit Zitat      
Ich hab die Heap Size aufs Maximum von 2000 MB gesetzt. Hilft leider noch immer nichts! Gleiche Fehlermeldung.
Mit
Code:
java.lang.Runtime.getRuntime.maxMemory


erhalte ich diesen Wert 1.9262e+009 als Antwort. Keine Ahnung was für eine Einheit das sein soll. Aber die 2000 MB sinds ja nich ganz ^^

Bei der Verwendung von
Code:
f=fopen(sprintf('%s/bin/%s/java.opts',matlabroot,computer('arch')),'w');
  fprintf(f,'-Xmx1024m');
  fclose(f);


bekomme ich folgende Fehlermeldung:

Code:
Error using ==> fprintf
Invalid file identifier.  Use fopen to generate a valid file identifier.


Damit wollte ich nämlich einfach mal 4000 MB ausprobieren, da ich 8000 MB Arbeitsspeicher habe, aber dein Code haut bei mir nicht ganz hin.


Also es kann doch echt nicht sein, dass das einfach nicht funktioniert. Irgendeinen Weg muss es doch geben einen so großen Cell-Array problemlos in Excel reinzupacken... Sad


Viele Grüße

Stefan
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.