Mit dem neuen Excel 2010 wurden die SparkLines eingeführt, welche sich mit der neuen VSTO 4 Version programmieren lassen.
Was ist ein SparkLine und wie sieht dieses aus?
SparkLines sind kleine Diagramme, die in einer einzelnen Excelzelle abgebildet werden.

Das Diagramm ist in der Spalte D zu erkennen und ist als SparkColumnStacked100 dargestellt.

SparkLines können ganz einfach über das entsprechende SparkLine-Tab optisch angepasst werden.
Doch wie erstelle ich diese per Code?
Das ist relativ einfach. Alles was dafür benötigt wird, ist ein Range-Objekt. Ein Range-Objekt ist ein definierter Bereich, welcher aus Zellen besteht. Es ist dabei egal, ob es aus mehreren Zellen oder nur aus einer Zelle besteht.
Range sparklineRange = sheet.get_Range("D1");
SparklineGroup sparkline = sparklineRange.SparklineGroups.Add(XlSparkType.xlSparkColumnStacked100, "A1:C1");
Nachdem das Range-Objekt definiert wurde, wird diesem eine SparkLineGroups hinzugefügt. Eine SparkLine benötigt die Darstellungsart und die Datenquelle, aus welcher das Diagramm generiert werden soll. Die Darstellungsart kann aus drei verschiedenen Diagrammarten (Linien-, Säulen- oder Gewinn/Verlust-Diagramm) gewählt werden.
sparkline.SeriesColor.ThemeColor = XlThemeColor.xlThemeColorAccent3;
sparkline.Points.Highpoint.Visible = true;
sparkline.Points.Firstpoint.Visible = true;
sparkline.Points.Negative.Visible = true;
Das SparkLine kann auch bspw. in der Graphenfarbe verändert werden. Alles was dafür getan werden muss, ist eine der entsprechenden XlThemeColor-Werte auszuwählen. Als ein weiteres optisches Detail kann festgelegt werden, dass die negativsten, ersten, letzten, etc. Werte eines SparkLines farblich gekennzeichnet werden.
So einfach lassen sich die SparkLines mit VSTO 4 programmieren. Zum Schluss ist hier ein komplettes lauffähiges Beispiel:
using System;
using Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
namespace ExcelWorkbook1
{
public partial class Tabelle1
{
private void Tabelle1_Startup(object sender, EventArgs e)
{
Worksheet sheet = Globals.ThisWorkbook.ActiveSheet as Worksheet;
SetRow(sheet, 1, 1, 4, 6);
SetRow(sheet, 2, 4, 1, 9);
SetRow(sheet, 3, 1, -5, 3);
Range sparklineRange = sheet.get_Range("D1");
SparklineGroup sparkline = sparklineRange.SparklineGroups.Add(XlSparkType.xlSparkColumnStacked100, "A1:C1");
sparkline.SeriesColor.ThemeColor = XlThemeColor.xlThemeColorAccent3;
sparkline.Points.Highpoint.Visible = true;
sparkline.Points.Firstpoint.Visible = true;
sparkline.Points.Negative.Visible = true;
sparklineRange.Copy(sheet.get_Range("D2:D3"));
}
private void Tabelle1_Shutdown(object sender, EventArgs e)
{
}
private void SetRow(Worksheet sheet, int row, params int[] values)
{
for (int x = 0; x < values.Length; x++)
{
sheet.Cells[row, x + 1] = values[x];
}
}
#region VSTO Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InternalStartup()
{
Startup += Tabelle1_Startup;
Shutdown += Tabelle1_Shutdown;
}
#endregion
}
}