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

Aus Matlab Excel-Diagramme in Excel erstellen

 

sanelko
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2009, 13:53     Titel: Aus Matlab Excel-Diagramme in Excel erstellen
  Antworten mit Zitat      
Hi.

Ich bin in der Lage Excel-Felder aus Matlab zu beschreiben (siehe unten). Aber...

Code:
% Das ist mein Programm.
function excel_matrixes(filename1, filename2)

h=actxserver('Excel.Application');
hWBs=h.Workbooks;
Mappe=hWBs.Add;
Tabelle=Mappe.Sheets;
Tab1=Tabelle.get('Item', 1);
Tab1.Activate;

x_Bereich=h.Activesheet.get('Range', 'B1');
x_Bereich.Value = 'Ambient Temperature= 10°C';
x_Bereich=h.Activesheet.get('Range', 'C1');
x_Bereich.Value = 'Ambient Temperature = 20°C';

%--------------------
fid = fopen(filename1);
tline=fgetl(fid);
a = fscanf(fid,'%g %g',[2 inf]) % Zeile aus Txt-Datei einlesen
a = a';
fclose(fid);
x=a(1:end,1);
y=a(1:end,2);

x_Bereich=h.Activesheet.get('Range', 'A2:A270');
x_Bereich.Value = x;
y_Bereich=h.Activesheet.get('Range', 'B2:B270');
y_Bereich.Value = y;

%--------------------
fid = fopen(filename2);
tline=fgetl(fid);
a = fscanf(fid,'%g %g',[2 inf]) % Zeile aus Txt-Datei einlesen
a = a';
fclose(fid);
x=a(1:end,1);
y=a(1:end,2);

y_Bereich=h.Activesheet.get('Range', 'C2:C270');
y_Bereich.Value = y;

%--------------------
Mappe.SaveAs('Simulationsergebnisse.xls');
Mappe.Close;

end


... ich wüsste auch noch wie ich aus diesen Feldern Excel-Diagramme in Excel erstellen könnte, ohne Excel öffnen zu müssen.

Es ist sehr langweilig immer wieder dieselben Diagramme in Excel zu erstellen. Wenn ich bestimmte Befehle wüsste mit denen ein bestimmtes Diagramm in Excel erstellt werden kann, wäre mir sehr geholfen.

Danke!
Private Nachricht senden Benutzer-Profile anzeigen


thirdeye

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2009, 10:16     Titel:
  Antworten mit Zitat      
Hi,

versuch mal fürs erste:

Code:

ex = actxserver('Excel.Application');
wbk=ex.Workbooks.Open('deinexcelfile.xls');
sht=wbk.Sheets('deinsheet');

chart=ex.Charts.Add;
chart.ChartType=('xlXYScatterSmoothNoMarkers'); % zB
chart.SeriesCollection.NewSeries;
chart.SeriesCollection(1).XValues=sht.Range('A1:A6'); % zB
chart.SeriesCollection(1).Values=sht.Range('B1:B6'); % zB
 



grüße

thirdeye
 
sanelko
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2009, 11:00     Titel:
  Antworten mit Zitat      
1. Vielen Dank für Deine schnelle (schneller als ich dachte) Antwort !

2. Ein Paar Fragen an Dich.

Wo kann man Deine und noch viele andere Befehle für Excel nachlesen? Ich frage, weil ich ein ganz bestimmtes (Farben der Kurven, Legende, Titel, Fonts etc.) Excel-Diagramm erstellen möchte.

Die nächste Frage ist warum folgendes nicht funktioniert:
Code:

ex = actxserver('Excel.Application');
wbk=ex.Workbooks.Open('C:\Matxcel.xls');
tabelle=wbk.Sheets;
tab1=tabelle.get('Item', 1);
tab1.Activate;

chart=ex.Charts.Add;
chart.ChartType=('xlXYScatterSmoothNoMarkers');
chart.SeriesCollection.NewSeries;
chart.SeriesCollection(1).XValues=tab1.Range('A2:A270');
chart.SeriesCollection(1).Values=tab1.Range('B2:B270');
 


Der Anfang ...
Code:
%
ex = actxserver('Excel.Application');
wbk=ex.Workbooks.Open('deinexcelfile.xls');
 

ist mir das klar (glaube ich zumindest). Ich erschaffe mir ein handle (wbk) zu meiner Excel-Datei, also etwas das der "Mappe" in meinem Code entspricht. In der folgenden Zeile habe ich nicht gewusst, was bei mir 'deinsheet' ist, ...
Code:
%
sht=wbk.Sheets('deinsheet');
 

... deswegen habe Ich es folgendermaßen gemacht:
Code:
%
ex = actxserver('Excel.Application');
wbk=ex.Workbooks.Open('C:\Matxcel.xls');
tabelle=wbk.Sheets;
tab1=tabelle.get('Item', 1);
tab1.Activate;
 


Danach kommt Dein Code ...
Code:
%
chart=ex.Charts.Add;
chart.ChartType=('xlXYScatterSmoothNoMarkers');
chart.SeriesCollection.NewSeries;
chart.SeriesCollection(1).XValues=tab1.Range('A2:A270');
chart.SeriesCollection(1).Values=tab1.Range('B2:B270');
 

... und leider werden nur die X-Werte ins Diagramm eingetragen. Für die letzte Zeile gab's folgende Fehlermeldung:
Code:

??? Invoke Error, Dispatch Exception:
Source: Microsoft Office Excel
Description: Die Values-Eigenschaft des Series-Objektes kann nicht
festgelegt werden.
Help File: C:\Program Files (x86)\Microsoft
Office\OFFICE11\1031\xlmain11.chm
Help Context ID: 0
 


Wie du sehen kannst bin ich ein Programmierneuling, das sich schwer von der Befehlsfolge ...
Code:
h=actxserver('Excel.Application');
hWBs=h.Workbooks;
Mappe=hWBs.Add;
Tabelle=Mappe.Sheets;
Tab1=Tabelle.get('Item', 1);
Tab1.Activate;

... trennt.

Vielicht hast du ein Gefühl bekommen was mir fehlt, was ich nicht richtig verstanden habe, oder was in meinem Code Überflüssig ist. Wenn du einen Eindruck von mir hast, bitte gib mir ein Paar Tipps und Erklärungen.

Im Voraus vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
thirdeye

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2009, 13:27     Titel:
  Antworten mit Zitat      
Hi,

Zitat:

1. Vielen Dank für Deine schnelle (schneller als ich dachte) Antwort !


gerne Smile

Zitat:

2. Ein Paar Fragen an Dich.

Wo kann man Deine und noch viele andere Befehle für Excel nachlesen? Ich frage, weil ich ein ganz bestimmtes (Farben der Kurven, Legende, Titel, Fonts etc.) Excel-Diagramm erstellen möchte.


hm... also eine vernünftige/vollständige anleitung für die ansteuerung von excel aus matlab heraus habe ich noch nicht gesehen, aber vielleicht ein paar tipps für dich:
1. beim zugriff über das COM interface sprichst du excel "objekte" an, mit get(ex), oder get(sht) usw aus dem oberen beispiel bekommst du alle gültigen methoden und eigenschaften des objektes angezeigt.

2. Bist du mit makroaufzeichnung von excel vertraut? (unter extras zu finden)
aufzeichnung starten,
gewünschte aktionen ausführen
aufzeichnung beenden
im VB editor das erstellte modul angucken.

Deine Aktionen werden als VB scripts aufgezeichnet und du kannst dir die verwendetetn Methoden angucken.

Vielleicht mal eine generelle frage: warum willst du unbedingt aus matlab heraus diagramme erzeugen?
1. sehen matlab digramme auch super aus
2. evtl ist es sinvoller VB scripts für dein vorhaben zu erstellen?



Zitat:

...In der folgenden Zeile habe ich nicht gewusst, was bei mir 'deinsheet' ist, ...
Code:

sht=wbk.Sheets('deinsheet');
 



deinsheet ist in dem fall die bezeichnung der tabelle, also zb 'Tabelle1', aber du hast recht, ich habe da was vergessen (passiert wenn man nciht direkt ausprobieren kann) das muss richtigerweise :
Code:

sht=wbk.Sheets.Item('deinsheet');
 

heißen

hm... bei der fehlermeldung, weiß ich grade nicht genau woran das liegt, müsste egtl gehen...

evtl finde ich später mal zeit nochmal reinzuschauen


grüße

thirdeye
 
sanelko
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.09.2009, 15:10     Titel:
  Antworten mit Zitat      
Ich habe es gerade gesehen. Nochmals vielen Dank 3rdeye!

Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
sanelko
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.09.2009, 13:18     Titel:
  Antworten mit Zitat      
Hi 3rdeye


Ich habe es soweit geschafft, ...
Code:

h=actxserver('Excel.Application');
hWBs=h.Workbooks;
Mappe=hWBs.Open('Matxcel.xls');
Tabellen=Mappe.Sheets;
Tab1=Tabellen.get('Item', 1);
Tab1.Activate;

Bereich=h.Activesheet.get('Range','A1:D203');
ZeitValue=h.Activesheet.get('Range','A2:A203').Value;

Chart=h.Charts.Add;

ActiveChart=h.Activechart;
ActiveChart.ChartType='xlXYScatterSmoothNoMarkers';
ActiveChart.PlotArea.Interior.ColorIndex = 2;

ActiveChart.HasTitle=1;
ActiveChart.ChartTitle.Characters.Text='Here comes the Title of my Chart';

ActiveChart.Axes(1).HasTitle=1;
ActiveChart.Axes(1).AxisTitle.Characters.Text='Here is the x Axis';
ActiveChart.Axes(1).MinimumScale=ZeitValue{1};
ActiveChart.Axes(1).MaximumScale=ZeitValue{length(ZeitValue)};

ActiveChart.Axes(2).HasTitle=1;
ActiveChart.Axes(2).AxisTitle.Characters.Text='Here is the y Axis';
ActiveChart.Axes(2).MaximumScale=100;
ActiveChart.Axes(2).MinimumScale=0;

ActiveChart.Legend.Position='xlLegendPositionBottom';

ActiveChart.SetSourceData(Bereich);
ActiveChart.PlotBy='xlColumns';

ActiveChart.SeriesCollection(1).Border.ColorIndex=5;  
ActiveChart.SeriesCollection(2).Border.ColorIndex=3;  
ActiveChart.SeriesCollection(3).Border.ColorIndex=44;
 

... aber ich schaffe es nicht die Dicke der einzellnen Graphen zu verändern.

Das Makro rät mir Folgendes:
Code:

    ActiveChart.SeriesCollection(1).Select
    With Selection.Border
        .ColorIndex = 5
        .Weight = xlMedium
        .LineStyle = xlContinuous
    End With

Und dem entsprechend habe ich es so ...
Code:

ActiveChart.SeriesCollection(1).Border.Weight = 'xlMedium';
 

... gelöst, aber es kommt ein Fehler. Weißt du wieso?
Private Nachricht senden Benutzer-Profile anzeigen
 
sanelko
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.10.2009, 14:25     Titel:
  Antworten mit Zitat      
Ich weiß es jetzt!

Code:

ActiveChart.SeriesCollection(1).Border.Weight = 3;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
burningsharky
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 27.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2009, 21:43     Titel:
  Antworten mit Zitat      
Hi, habe ein ähnliches Problem wie oben beschrieben. Bei mir ist es so, dass ich Daten in Excel gespeichert habe und jetzt daraus auch ein Diagramm erstellen möchte (in Excel).

Code:

% Insert a new workbook
Workbooks = handles.excel_1.Workbooks;
handles.Workbook = invoke(Workbooks, 'open',[pfadname_s dateiname_s]);

Mappe=handles.Workbook;
Tabellen=Mappe.Sheets;
Tab1=Tabellen.get('Item', 1);
Tab1.Activate;



Chart=handles.excel_1.Charts.Add;

ActiveChart=handles.excel_1.Activechart;
ActiveChart.ChartType='xlXYScatterSmoothNoMarkers';

ActiveChart.HasTitle=1;
ActiveChart.ChartTitle.Characters.Text='Druckverlauf Zylinder 1 über °KW';

ActiveChart.SeriesCollection(1).XValues=Tab1.Range('A2:A7201');
ActiveChart.SeriesCollection(1).Values=Tab1.Range('B2:B7201');
 


so sieht das Ding in kurzform aus. Das Problem ist jetzt, dass er für das Diagramm nicht nur die Range von B2:B7201 nimmt sondern auch noch alle anderen Spalten von C - J (halt soviele wie da stehen).und die dann alle in ein Diagramm setzt.
Meine Frage wär also: wie kriege ich es hin dass er die XValues als X-Achse nimmt und die Values als Y-Achse (und nur die angegebenen)
Habe in der Richtung auch leider kein Beispiel oder sonstige Erklärungen gefunden.
schon mal vielen Dank für die Hilfe!
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.