Nun wollen wir uns der Implementierung der Smarttags widmen, was den 1. richtigen Code darstellt. Im vorangegangen Beitrag wurde bereits die Architektur für diesen Teil erklärt (http://blogs.ppedv.de/mariom/archive/Excel-und-Yahoo-Finance-Teil-1). Nun werden die Smarttags erstellt. Zu beginn brauchen wir einen Namespace Import, welcher die Excel.Tools importiert. Dies sieht dann folgendermaßen aus:
using Smart = Microsoft.Office.Tools.Excel;
Da eine gewisse Anzahl an Smarttags erstellt werden sollte wird dies mit eime Dictionary geregelt. Neben diesem Dictionary brauchen wir noch den Smarttag an sich als Objekte in der Klasse. Diese werden mit Symbols (das Dictionary) oder mit "MySmartThing" bezeichnet (Der Smarttag)
private Smart.SmartTag MySmartThing;
private Dictionary<string, string> Symbols;
Doch warum wird hier ein Dictionary verwendet? Nun, der Benutzer soll lediglich "Microsoft" eingeben. Jedoch sind die Finanzbezeichnungen anders. Das Symobl für Microsoft lautet etwa "MSFT" - und dies wollen wir mit einem Dictionary zuordnen. Dieses Dictionary bekommt eine Anzahl an benutzerdefinierten Werten, welche in "ThisAddin_StartUp" eingegeben werden. Wie dies funktioniert ist im nachkommenden Listing ersichtlich.
Symbols = new Dictionary<string, string>();
Symbols.Add("Microsoft", "MSFT");
Symbols.Add("Yahoo", "YHOO");
Symbols.Add("Accenture", "ACN");
Nun muss auch noch der SmartTag erstellt werden. Dieser benötigt neben den Namen auch noch einen eindeutigen Identifier zur Bezeichnung, welche vorzugsweise als URI dargestellt wird. Damit der Smarttag korrekt ausgeführt werden kann (Also auf Dinge reagiert werden kann) müssen noch SmartTag Aktionen (Action) dafür erstellt werden. Die Erstellung des Smarttags sieht dann so aus:
MySmartThing = new Smart.SmartTag("mario.mh.dev.smarttag#smartthing11", "Get Stock Symbols");
Smart.Action SmartQueryYahoo, SmartGetSymbolName;
Jeder Smarttag benötigt auch Wörter auf welche dieser reagieren soll. Diese Wörter werden als Terms bezeichnet und kommen aus dem Dictionary, welches Eingangs erstellt wurde. Schlussendlich müssen die Aktionen für die Smarttags noch erstellt werden. "SmartGetSymbolName" soll den Symbolnamen liedern, SmartQueryYahoo soll eine Anfrage an Yahoo senden - die Bezeichnung soll auch in diese Richtung gewählt werden.
foreach (string key in Symbols.Keys)
{
MySmartThing.Terms.Add(key);
}
SmartGetSymbolName = new Smart.Action("Get Stock Symbol Name");
SmartQueryYahoo = new Smart.Action("Check Yahoo Finance");
Die Aktionen müssen dann auch noch mit dem SmartTag verknüpft werden - dies funktioniert in der Actions-Auflistung.
MySmartThing.Actions = new Smart.Action[] { SmartQueryYahoo, SmartGetSymbolName };
Damit der SmartTag in Excel verwendet werden kann muss dieser auch noch der SmartTag Auflistung von Excel hinzugefügt werden. Hierfür gibt es die Methode "VSTOSmartTags.Add" welche Dieses erledigt.
VstoSmartTags.Add(MySmartThing);
Nun kann man den SmartTag bereits klicken. Wie dies aussehen kann wird im Bild unten dargestellt.
Im nächsten Eintrag werde ich dann erklären wie man auf die Daten von Yahoo zugreifen kann.
Stay tuned