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

Erstellung von Excel File dauert sehr lange

 

Philipp68
Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 24.01.2017, 11:01     Titel: Erstellung von Excel File dauert sehr lange
  Antworten mit Zitat      
Hallo,
ich erstelle mit Matlab ein Excel File, in das Messwerte und figures eingefügt werden, das klappt soweit auch, nur dauert es 1-2 min. Ich habe schon mal diese Art von Erstellung verwendet, jedoch ging es damals viel schneller. Ich würde euch einfach mal den Code zeigen.
Code:


figure(1)
hold on
bar([Max_a1,Max_a2;Max_b1,Max_b2;Max_c1,Max_c2;Max_d1,Max_d2;Max_e1,Max_e2;Max_f1,Max_f2;Max_g1,Max_g2],1);
set(gca,'XTickLabel',{'','Vollfeld','Makula','Papille','V. Papillenkreisring','H. Papillenkreisring','I. Kreisring','Ä. Kreisring'},'fontsize',6.5);
set(figure(1),'Units', 'centimeters', 'Position', [0.5, 0.5, 23, 8]);
plot(xlim,[100 100],'r');
ylabel('Maximale Dilatation [%]','fontsize',8);
title('Maximale Dilatation aus Gesamtmittelwert von jeweils inferior/superior Arterie/Vene','fontsize',10);
hold off
box on


hold on
for i = 1:5
    figure(i)
    legend('Aterie','Vene','fontsize',5);
end
hold off

FILE  = strcat(pwd,'\Parameter fertig','.xlsx');
% Excel___________________________________________________________
% Parameter für Excel
filename = strcat('Parameter fertig','.xlsx');
sheet = 1;



% Parameter.xlsx ist Vorlage
copyfile('Parameter.xlsx',filename)

% Tabelle 1 Maximale Dilatation von 30s - 50s
xlswrite(filename,Max_a1_x,sheet,'B7:B7');
xlswrite(filename,Max_a2_x,sheet,'B8:B8');
.
.
.
% Verbidnung zu Excel
xl = actxserver('Excel.Application');
% Macht Excel sichtbar
set(xl,'Visible',1);
% Öffnet die vorher erstellte Vorlage
invoke(xl.Workbooks,'Open',FILE);
% Datenblatt aktiv zum Beschreiben
xls = xl.ActiveSheet;



print(figure(1),'-dbitmap');
xls.Range('A16:A16').PasteSpecial;
close(figure(1));

% Speichert die Excel Datei
xl. ActiveWorkbook.Save;
%Schließt Excel und trennt die Verbindung
% Quit(xl);
% delete(xl);

 

Insgesamt habe ich fünf figures, die ich in meine Excelvorlage einfüge.
Es ist sehr mühsam so lange zu warten, wenn ich immer wieder was neue schreibe, run betätige, um zu sehen, ob es funktioniert.
Hoffe mir kann jemand helfen und sagen, woran es liegt. Smile

Zusätzlich erscheint immer diese Warnung:
Code:

Warning: Ignoring extra legend entries.
> In legend at 290
  In Neu at 764
Warning: Ignoring extra legend entries.
> In legend at 290
  In Neu at 764
Warning: Ignoring extra legend entries.
> In legend at 290
  In Neu at 764
Warning: Ignoring extra legend entries.
> In legend at 290
  In Neu at 764
 
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: 24.01.2017, 11:26     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich habe schon mal diese Art von Erstellung verwendet, jedoch ging es damals viel schneller.

Kann es sein, dass der Ablauf damals ein etwas anderer war? Z.B. nicht viele xlswrite-Befehle nacheinander?

Bei aktuellen MATLAB-Versionen dürfte das ganze schneller sein, weil bei wiederholten xlswrite-Befehlen nicht jedes Mal der ganze Excel-Prozess geöffnet und geschlossen wird. Bei älteren Releases musst du selbst auf effiziente Programmierung achten, z.B.
Code:
xlswrite(filename,[Max_a1_x;Max_a2_x],sheet,'B7:B8');

statt jeden Wert einzeln schreiben.

Es kann auch sein, dass das ganze schneller läuft, wenn du den Excel-Prozess nicht sichtbar machst.

Zitat:
Zusätzlich erscheint immer diese Warnung:

Hast du denn zuvor 5 Figures mit je 2 Linien erstellt?

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

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 24.01.2017, 12:20     Titel:
  Antworten mit Zitat      
Hallo Harald!
Ich hatte damals nicht so viele xlswrite - Befehle.
Zur Zeit sind es 5 x 14 xlswrite - Befehle, mit deinem Tipp habe ich diese nun auf 5 x 2 reduziert und es ist nun deutlich schneller ~ 30s Smile

"Hast du denn zuvor 5 Figures mit je 2 Linien erstellt?". Was kann ich mir unter "zwei Linien" vorstellen?

Ich meinem Code wird nur einmal die "bar - Funktion" für meine fünf figures (kurz vor dem Teil mit Excel) ausgeführt. Der Ablauf ist folgendermaßen: Messwerte werden berechnet. Auf dem Desktop erscheinen figure 1 - 5, danach werden diese automatisch geschlossen und erneunt geöffnet, dann stoppt es bei figure(4) für 10 - 20 sec, figure(5) erscheint, figure 1-5 sind nun geöffnet, die Excelvorlage öffnet sich und die figures werden eingefügt. Das plötzliche stoppen macht mich stutzig.
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: 24.01.2017, 20:00     Titel:
  Antworten mit Zitat      
Hallo,
Zitat:

Zur Zeit sind es 5 x 14 xlswrite - Befehle, mit deinem Tipp habe ich diese nun auf 5 x 2 reduziert und es ist nun deutlich schneller ~ 30s

Wenn du das in einen xlswrite-Befehl packst, wird es sicher noch schneller ;)
Sollte das nicht möglich sein, versuchs mal über
https://www.mathworks.com/matlabcen.....eexchange/10465-xlswrite1

Wie der eine bar-Befehl zu 5 Figures passt, kann ich mir nicht vorstellen. Für weitere Unterstützung dazu bitte Code, der dieses Verhalten reproduziert, posten.

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

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 25.01.2017, 12:20     Titel:
  Antworten mit Zitat      
Hallo,
habe mich falsch ausgedrückt, ich meinte, dass ich für jedes figure "bar()" benutzt habe, also fünf Blockdiagramme. Danke für den Link, werde es mir mal genauer anschauen, wenn ich die Zeit habe. Mit der bisherigen Reduzierung der Befehle bin ich schon mal zufrieden Smile
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.