Mit der VSTO kann man Diagramme sehr einfach bearbeiten. In diesem Blogeintrag möchte ich zeigen, wie man mit nur ca. 5 Zeilen Quellcode ein Diagramm einfügt, welches auch bereits formatiert ist.
Ein Chart ist eine Klasse vom Typ "Chart" (Wie könnte es auch anders sein?). Was wir jedoch vorher benötigen ist eine Zahlenreihe. Hierfür geben wir mal einige Werte in Excel ein:
Danach kann auch bereits das Chart eingefügt werden. Dies funktioniert über "Charts.Add". Hierbei kann man angeben, vor welchen bzw. nach welchen Tabellen es sich befinden soll - im aktuellen Szenario jedoch immer als "System.Type.Missing" angegeben. Danach wird der ChartWizard verwendet, um das Chart auszurichten.
Dieser ChartWizard benötigt einige Parameter. Diese sind:
- Der erste Parameter (Source) ist die Range. Dies bezieht sich auf die Zellen, die als Datenquelle verwendet werden sollen.
- Der zweite Parameter (Gallery) ist der Typ der Chart, welcher verwendet werden soll - also wie es aussehen soll.
- Der dritte Parameter (Format) gibt an, welches Format verwendet werden soll (jedes Chart hat unterschiedliche Formatierungen zur Verfügung) - wird jedoch hier nicht verwendet
- Der vierte Parameter (PlotBy) gibt an, woran sich das Chart orientieren soll - Also die Ausrichtung anhand von Zeilen oder Spalten
- Der fünfte Parameter (CategoryLabels) gibt an, wie viele Beschriftungen vorkommen sollen - auch dieser Parameter wird im Beispiel nicht verwendet
- Der sechste Parameter (SeriesLabels) gibt an, wie viele Beschriftungen der Serien vorkommen sollen - auch dieser Parameter wird nicht verwendet
- Der siebte Parameter (HasLegend) gibt an, ob eine Legende angezeigt wird.
- Der achte Parameter (Title) gibt den Titel an
- Der neunte Parameter (CategoryTitle) gibt den Titel der Kategorien an
- Der zehnte Parameter (ValueTitle) gibt den Titel der Serien, also Werte, an
- Der elfte und letzte Parameter (ExtraTitle) gibt den Titel an, wenn es sich um ein 3D-Chart handelt.
Der Code ist:
private void Sheet1_Startup(object sender, System.EventArgs e)
{
Excel.Chart cht;
cht = Globals.ThisWorkbook.Charts.Add(System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing) as Excel.Chart;
cht.ChartWizard(Range["A2", "B8"], XlChartType.xl3DLine, System.Type.Missing,
XlRowCol.xlColumns, System.Type.Missing, System.Type.Missing, true, "Chart", "Axis",
"Value", "Extra");
}
Ergebnis: