Mario  Meir-HuberSmartTags mit Application Level AddIns für Office Programmieren


Wie im vorigen Post bereits erwähnt, gibt es nun die Möglichkeit SmartTags für Application Level PlugIns zu entwickeln. (Vorher war es natürlich auch schon möglich, allerdings nicht so einfach)

Wie dies nun im Quellcode aussieht möchte ich an dieser Stelle nun (als VSTO-Rebell mache ich es mit C# anstelle von VB) verdeutlichen.

Smarttags kommen in Office aus dem "Tools" Namespace - dieser ist zwar in C# mit an Board, jedoch gibt es in weiterer Folge einige Probleme damit. Daher müssen wir diesen in einen Namespace rein geben. Ich mache dies normalerweise mit "Smart" (Natürlich kann man das auch anders umgehen, aber ich will diese Lösung zeigen)

using Smart = Microsoft.Office.Tools.Excel;

Ein SmartTag kommt in nun aus der Klasse "SmartTag" - wie sollte es auch anders sein. Was bei einem SmartTag zu berücksichtigen ist, ist dass dieser einen eindeutigen Namen benötigt - am besten als URI Angabe. Dieser Name muss dann auch noch mit einer Raute (#) getrennt werden. Schlussendlich benötigt dieser noch einen Titel.

private Smart.SmartTag MyCars;

... und erstellen (am besten in "StartUp")

private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            MyCars = new Smart.SmartTag("mario.mh.autos#garage", "Meine Autos");

danach werden Wörter benötigt, anhand welchen ein SmartTag erkannt wird. Dies funktioniert mit der Terms-Auflistung:

MyCars.Terms.AddRange(new string[]{"BMW", "Audi", "Mercedes"});

 

Wollen wir nun auf eine Eingabe reagieren, so kann man Actions hinzufügen. Hierfür müssen Actions definiert werden.

private Smart.Action MyAction1, MyAction2;

Mit Event-Handlern kann man dann die Aktionen behandeln. Dieser Eventhandler erlaubt es auch, auf das Wort zuzugreifen, welches das Event ausgelöst hat. Dies ist in den EventArgs mit "e.Text" gekennzeichnet.

MyAction1 = new Smart.Action("Auto kaufen");
MyAction1.Click += new Smart.ActionClickEventHandler(MyAction1_Click);

MyAction2 = new Smart.Action("Vertragswerkstätte suchen");
MyAction2.Click += new Smart.ActionClickEventHandler(MyAction2_Click);

MyCars.Actions = new Smart.Action[] {MyAction1, MyAction2};

Der Event-Handler:

void MyAction2_Click(object sender, Smart.ActionEventArgs e)
{
    if (e.Text == "Mercedes") System.Windows.Forms.MessageBox.Show("Ein Mercedes geht doch nicht kaputt!");
    else System.Windows.Forms.MessageBox.Show("Vertragswerkstätte wurde verständigt");
}

(Nein, ich werde nicht von Mercedes bezahlt) Schlussendlich muss der Smarttag nur noch hinzugefügt werden:

this.VstoSmartTags.Add(MyCars);

Beweis:

image

gesamter Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Smart = Microsoft.Office.Tools.Excel;
using Microsoft.Office.Tools.Excel.Extensions;

namespace SmartAddIn
{
    public partial class ThisAddIn
    {
        private Smart.SmartTag MyCars;
        private Smart.Action MyAction1, MyAction2;

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            MyCars = new Smart.SmartTag("mario.mh.autos#garage", "Meine Autos");
            MyCars.Terms.AddRange(new string[]{"BMW", "Audi", "Mercedes"});

            MyAction1 = new Smart.Action("Auto kaufen");
            MyAction1.Click += new Smart.ActionClickEventHandler(MyAction1_Click);

            MyAction2 = new Smart.Action("Vertragswerkstätte suchen");
            MyAction2.Click += new Smart.ActionClickEventHandler(MyAction2_Click);

            MyCars.Actions = new Smart.Action[] {MyAction1, MyAction2};

            this.VstoSmartTags.Add(MyCars);
        }

        void MyAction2_Click(object sender, Smart.ActionEventArgs e)
        {
            if (e.Text == "Mercedes") System.Windows.Forms.MessageBox.Show("Ein Mercedes geht doch nicht kaputt!");
            else System.Windows.Forms.MessageBox.Show("Vertragswerkstätte wurde verständigt");
        }

        void MyAction1_Click(object sender, Smart.ActionEventArgs e)
        {
            System.Windows.Forms.MessageBox.Show("Auto wurde gekauft");
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }
        
        #endregion
    }
}


Kategorien: .Net;C#;Office;VSTO; 26.08.2008 11:32:06


 


Neuen Kommentar einfügen:

  Titel:   
  Name:
  E-Mail:
  Kommentar:

 
 


Kommentare




© Copyright 2008 ppedv AG