
		<rss version="2.0">
			<channel>
			<ttl>5</ttl>
				<title>ppedv Blog</title>
				<link>http://blog.ppedv.de</link>
				<description>update by ppedv ***** Team Blog</description>
				<lastbuildDate>Sat, 09 May 2026 09:49:03 GMT</lastbuildDate>

				<image>
				    <url>http://blogs.ppedv.de/images/logo2.gif</url>
				    <title>ppedv Blog</title>
				    <link>http://www.ppedv.de</link>
				</image>
	
		<item>
			<title>[Mario Meir-Huber] VSTO auf der VsOne und OpenSpaces</title>
			<description>In wenigen Tagen ist es soweit: Die VsOne wird in München statt finden. Auf der Konferenz werde ich 2 Vorträge zum Thema Office machen:  Office in the Cloud  Office und .Net 3.5  Bei “Office in the Cloud” werde ich vor allem die Cloud Computing Möglichkeiten für Office ausloten und was diese bringen. Eines kann ich vorweg schon mal verraten: Es wird ein “cooles” Beispiel mit Live Mesh und ein weiteres Beispiel mit Azure geben. Da es ja Office und nicht nur VSTO im Titel heißt, wird auch das OpenXML Format eine gewisse Rolle spielen.  Im Vortrag “Office und .Net 3.5” werde ich vor allem die neuen Funktionen mit dem SP1 von .Net beleuchten: Hierbei kommt ein Beispiel zu Smarttags und ein einfaches WCF Sample zum Einsatz.   Also wenn jemand in der Nähe ist – einfach vorbei kommen :)  &#160;  Ferner gibt es auch noch die OpenSpaces, was eine Art Ask the Expert darstellt, allerdings in einer sehr lockeren Atmosphäre. Hierbei sind einige MVP’s und Technologieexperten sowie 2 Program Manager von Microsoft anwesend. So wird beispielsweise Chris Sells über Oslo erzählen. Gemeinsam mit Lars Keller biete ich einen OpenSpace zu Office Business Applications an, wo man über alles was so in der VSTO, Sharepoint und OOXML Entwicklung vorkommt quatschen kann. Die genaue Agenda ist dort erhältlich: http://www.vsone.de/OpenSpace.aspx  &#160;  In diesem Sinne – bis zur VsOne!</description>
			<link>http://blogs.ppedv.de/mariom/archive/VSTO-auf-der-VsOne-und-OpenSpaces</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Sat, 07 Feb 2009 10:52:54 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Excel und Yahoo Finance (Teil 2 - Smarttags)</title>
			<description>Nun wollen wir uns der Implementierung der Smarttags widmen, was den 1. richtigen Code darstellt. Im vorangegangen Beitrag wurde bereits die Architektur f&#252;r diesen Teil erkl&#228;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&#223;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 &quot;MySmartThing&quot; bezeichnet (Der Smarttag)

private Smart.SmartTag MySmartThing;
private Dictionary&lt;string, string&gt; Symbols;

Doch warum wird hier ein Dictionary verwendet? Nun, der Benutzer soll lediglich &quot;Microsoft&quot; eingeben. Jedoch sind die Finanzbezeichnungen anders. Das Symobl f&#252;r Microsoft lautet etwa &quot;MSFT&quot; - und dies wollen wir mit einem Dictionary zuordnen. Dieses Dictionary bekommt eine Anzahl an benutzerdefinierten Werten, welche in &quot;ThisAddin_StartUp&quot; eingegeben werden. Wie dies funktioniert ist im nachkommenden Listing ersichtlich.

Symbols = new Dictionary&lt;string, string&gt;();
Symbols.Add(&quot;Microsoft&quot;, &quot;MSFT&quot;);
Symbols.Add(&quot;Yahoo&quot;, &quot;YHOO&quot;);
Symbols.Add(&quot;Accenture&quot;, &quot;ACN&quot;);

Nun muss auch noch der SmartTag erstellt werden. Dieser ben&#246;tigt neben den Namen auch noch einen eindeutigen Identifier zur Bezeichnung, welche vorzugsweise als URI dargestellt wird. Damit der Smarttag korrekt ausgef&#252;hrt werden kann (Also auf Dinge reagiert werden kann) m&#252;ssen noch SmartTag Aktionen (Action) daf&#252;r erstellt werden. Die Erstellung des Smarttags sieht dann so aus:

MySmartThing = new Smart.SmartTag(&quot;mario.mh.dev.smarttag#smartthing11&quot;, &quot;Get Stock Symbols&quot;);

Smart.Action SmartQueryYahoo, SmartGetSymbolName;

Jeder Smarttag ben&#246;tigt auch W&#246;rter auf welche dieser reagieren soll. Diese W&#246;rter werden als Terms bezeichnet und kommen aus dem Dictionary, welches Eingangs erstellt wurde. Schlussendlich m&#252;ssen die Aktionen f&#252;r die Smarttags noch erstellt werden. &quot;SmartGetSymbolName&quot; soll den Symbolnamen liedern, SmartQueryYahoo soll eine Anfrage an Yahoo senden - die Bezeichnung soll auch in diese Richtung gew&#228;hlt werden. 

foreach (string key in Symbols.Keys)
{
    MySmartThing.Terms.Add(key);
}

SmartGetSymbolName = new Smart.Action(&quot;Get Stock Symbol Name&quot;);
SmartQueryYahoo = new Smart.Action(&quot;Check Yahoo Finance&quot;);

Die Aktionen m&#252;ssen dann auch noch mit dem SmartTag verkn&#252;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&#252;gt werden. Hierf&#252;r gibt es die Methode &quot;VSTOSmartTags.Add&quot; welche Dieses erledigt. 

VstoSmartTags.Add(MySmartThing);

Nun kann man den SmartTag bereits klicken. Wie dies aussehen kann wird im Bild unten dargestellt. 

 

Im n&#228;chsten Eintrag werde ich dann erkl&#228;ren wie man auf die Daten von Yahoo zugreifen kann. 

Stay tuned</description>
			<link>http://blogs.ppedv.de/mariom/archive/Excel-und-Yahoo-Finance-Teil-2---Smarttags</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Thu, 27 Nov 2008 17:32:51 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>C#</category><category>Office</category><category>VSTO</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Excel und Yahoo Finance (Teil 1)</title>
			<description>Auch wenn es nichts mit der &#220;bernahme von Yahoo durch Microsoft geworden ist so m&#246;chte ich an dieser Stelle Yahoo durch &quot;Office&quot; &#252;bernehmen - konkreter gesagt eine Applikation schreiben, welche den Yahoo Service abfragt und die Daten in einem Diagramm darstellt. Um dies zu erstellen m&#252;ssen vorerst einige Grundlegende Dinge gekl&#228;rt werden:  1.) Woher weis man welche Aktie gesucht werden soll?  2.) Wie bekomme ich die Aktie?  3.) Wie kann dies der User regeln?  4.) Wie wird das ganze dargestellt?  &#160;  Punkt 1 soll mit einem SmartTag gel&#246;st werden (ja ich weis, ich liebe diese Dinger). Dies kommt einfach in ein Excel-AddIn Projekt rein. Als Terms werden hierf&#252;r ein paar Aktien-Symbole (entweder man sucht nach denen im Web oder man weis diese auswendig;)) eingegeben. Danach wird der Event-Handler gesetzt. Dieser Schritt wird im Posting 2 genauer erkl&#228;rt.   Punkt 2 ist die Seite, woher die Daten kommen. Hier wird finance.yahoo.com verwendet. Der Workflow sieht in etwa so aus: Man verwende einen Browser, gehe auf die Seite, suche nach einer Aktie (z.B. MSFT), l&#228;dt sich den Kurs mit &quot;Get Quotes&quot; und sucht sich dann die &quot;Historcal Prices&quot; raus. Hier wird eine Liste mit den Kursverl&#228;ufen angezeigt. Wenn man an das Ende der Seite scrollt kommt man zu einem Link, welcher mit &quot;Download to Spreadsheet&quot; bezeichnet ist. Dies liefert eine CSV-Datei zur&#252;ck, welche auch einfach von unserer Office-Applikation abgeholt werden kann. Die nun folgenden Abbildungen erkl&#228;ren diese Vorgehensweise:  &#160;     Abbildung 1: Aktie suchen  &#160;     Abbildung 2: Historical Prices  Punkt 3: Wie kann dies der User regeln? Dies wird einfach durch Eingabe des Symbol-Namens mithilfe eines Smarttags geregelt.   Punkt 4: Wie wird das ganze dargestellt? Die Darstellung soll hier in einer extra Liste erfolgen, welche die Daten ausgibt. Ferner soll ein Diagramm (3D-Linien) dargestellt werden, da dies die beste Weise ist einen Kursverlauf darzustellen.  Im n&#228;chsten Posting (Teil 2) geht es weiter mit der Entwicklung der SmartTags f&#252;r diese Applikation. Stay tuned.</description>
			<link>http://blogs.ppedv.de/mariom/archive/Excel-und-Yahoo-Finance-Teil-1</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Wed, 26 Nov 2008 13:12:49 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>C#</category><category>Office</category><category>VSTO</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Verschiedene LineSegments in WPF/Silverlight von Code</title>
			<description>Will man mithilfe des Path ein &quot;X&quot; zeichnen, so bedient man sich in XAML eines einfachen &quot;Move&quot; Befehls, damit die einzelnen Segmente nicht verbunden sind. Komplexer gestaltet sich dieses Problem jedoch dann, wenn man einen Pfad von Code zeichnen will. Hierf&#252;r ben&#246;tigt man mehrere Figuren.   Das vorgehen ist folgenderma&#223;en:   1. Man erstellt 2 Figuren  2. Man erstellt 2 Segmente  3. Man wei&#223;t die Segmente den Figuren zu  4. Man f&#252;gt die Figuren einer PathFigureCollection hinzu  5. Die PathFigureCollection wird der PathGeometry des Pfades zugewiesen  6. Man setzt die Startpunkte f&#252;r die in (2) erstellten Segmente. Diese m&#252;ssen jeweils 0,0 und 100,0 sein (damit keine irritierenden Linien entstehen)  7. Man f&#252;gt 2 diagonale Linien hinzu (jeweils den in Punkt 2 erstellten Segmenten)  8. FERTIG  Ein Code k&#246;nnte in etwa so aussehen:  Path p = new Path();

PathGeometry Geom = new PathGeometry();
PathFigureCollection GFigure = new PathFigureCollection();
PathFigure Figure = new PathFigure();
PathFigure Figure2 = new PathFigure();
PathSegmentCollection Segment = new PathSegmentCollection();
PathSegmentCollection Segment2 = new PathSegmentCollection();

Figure.Segments = Segment;
Figure2.Segments = Segment2;

GFigure.Add(Figure);
GFigure.Add(Figure2);
Geom.Figures = GFigure;

Figure.StartPoint = new Point(0, 0);
Figure2.StartPoint = new Point(100, 0);

Segment.Add(new LineSegment() { Point = new Point(0, 0) });
Segment.Add(new LineSegment() { Point = new Point(100, 100) });

Segment2.Add(new LineSegment() { Point = new Point(100, 0) });
Segment2.Add(new LineSegment() { Point = new Point(0, 100) });

p.Stroke = new SolidColorBrush(Colors.Red);
p.StrokeThickness = 2;

p.Data = Geom;
</description>
			<link>http://blogs.ppedv.de/mariom/archive/Verschiedene-LineSegments-in-WPFSilverlight-von-Code</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Thu, 25 Sep 2008 12:35:02 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>C#</category><category>Silverlight</category><category>Silverlight 2</category><category>Silverlight Mobile</category><category>WPF</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] US-Elite Uni Stanford und Silverlight - Bildung fr alle</title>
			<description>Die US-Elite Uni Stanford bietet seit kurzem deren Engineering Kurse Online an. Diese Kurse sind f&#252;r jeden frei zug&#228;nglich. Derzeit befinden sich dort 10 Kurse online. Doch das wohl interessanteste ist, das Stanford hier auf Silverlight als Media-Player setzt.   Es werden viele Features von Silverlight genutzt. So wird auch die Zeit mit markanten Punkten angegeben. Ein weiteres, nicht uninteressantes Feature ist die implementierung von Facebook, wo man sich so genannte &quot;Community Notes&quot; ansehen kann.  Der Blogeintrag zu diesem Thema ist zu finden unter:  http://blogs.msdn.com/synergist/archive/2008/09/19/now-everyone-can-study-engineering-at-stanford-with-silverlight.aspx  Die Stanford-Seite:  http://see.stanford.edu</description>
			<link>http://blogs.ppedv.de/mariom/archive/US-Elite-Uni-Stanford-und-Silverlight---Bildung-fuumlr-alle</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Tue, 23 Sep 2008 11:56:19 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>ASP.NET</category><category>Silverlight</category><category>Silverlight 2</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Suchmaschine mit Silverlight</title>
			<description>Silverlight dringt allm&#228;hlich in mehr und mehr Felder im Web ein. So hat Microsoft eine (derzeit noch als Beta) verf&#252;gbare Suchmaschine entwickelt. Diese ist unter http://www.tafiti.com erreichbar.   Besonders interessant ist, wie das Userinterface gestaltet ist. Dies erlaubt wesentlich mehr Interaktion als derzeit bekannte Suchmaschinen. Neben der M&#246;glichkeit, Ergebnisse w&#228;hrend der Anzeige noch zu verfeinern (und das ganze geht ohne Postbacks) kann man Ergebnisse auch einfach mittels Drag&amp;Drop abspeichern. Also: rein schaun lohnt sich.</description>
			<link>http://blogs.ppedv.de/mariom/archive/Suchmaschine-mit-Silverlight</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Sat, 20 Sep 2008 19:08:27 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Einfhrung zu Diagrammen in Office (Excel und C#)</title>
			<description>Mit der VSTO kann man Diagramme sehr einfach bearbeiten. In diesem Blogeintrag m&#246;chte ich zeigen, wie man mit nur ca. 5 Zeilen Quellcode ein Diagramm einf&#252;gt, welches auch bereits formatiert ist.   Ein Chart ist eine Klasse vom Typ &quot;Chart&quot; (Wie k&#246;nnte es auch anders sein?). Was wir jedoch vorher ben&#246;tigen ist eine Zahlenreihe. Hierf&#252;r geben wir mal einige Werte in Excel ein:     Danach kann auch bereits das Chart eingef&#252;gt werden. Dies funktioniert &#252;ber &quot;Charts.Add&quot;. Hierbei kann man angeben, vor welchen bzw. nach welchen Tabellen es sich befinden soll - im aktuellen Szenario jedoch immer als &quot;System.Type.Missing&quot; angegeben. Danach wird der ChartWizard verwendet, um das Chart auszurichten.  Dieser ChartWizard ben&#246;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&#252;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&#252;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&#160;&#160;   - 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[&quot;A2&quot;, &quot;B8&quot;], XlChartType.xl3DLine, System.Type.Missing,
        XlRowCol.xlColumns, System.Type.Missing, System.Type.Missing, true, &quot;Chart&quot;, &quot;Axis&quot;,
        &quot;Value&quot;, &quot;Extra&quot;);
}

Ergebnis:

</description>
			<link>http://blogs.ppedv.de/mariom/archive/Einfuumlhrung-zu-Diagrammen-in-Office-Excel-und-C</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Wed, 27 Aug 2008 16:23:10 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>C#</category><category>Office</category><category>VSTO</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Von VBA nach VSTO: Viele Wege fhren nach ... .Net</title>
			<description>In der Office Entwicklung ist VBA eines der h&#228;ufiger vorkommenden Dinge. Viel alter Code ist bereits vorhanden und muss gewartet werden. Oft ist die Umstellung auf .Net deshalb mit sehr viel M&#252;hen und Kosten verbunden. Jedoch gibt es auch die M&#246;glichkeit, VBA Code in VSTO und somit .Net zu verwenden. In diesem Eintrag will ich mal die Execute-Methode vorstellen, welche auf VBA Code zugreift. Somit kann man beide Welten verwenden: Alten VBA Code ausf&#252;hren, von dem man wei&#223; dass dieser l&#228;uft und neue Klassen und Objektorientierung in der Office Entwicklung einf&#252;hren.   Dieses Beispiel greift auf einem VBA Makro aus einem Xlsm (Macro Enabled Excel Workbook) zu. Der Zugriff sollte auch &#252;ber eine neue Technologie, n&#228;mlich dem Ribbon, funktionieren. Hierf&#252;r wird ein neues Projekt mit einem Ribbon erstellt. Ferner wird die Xlsm Datei ben&#246;tigt. Diese soll einen Makro enthalten.  1. Schritt: Makro erstellen  In der Xlsm Datei wird ein neuer Makro erstellt. Im Modul &quot;Module1&quot; wird eine neue &quot;add()&quot; Funktion hinzugef&#252;gt. Dort k&#246;nnte beliebiger Code stehen. Im aktuellen Fall ist es jedoch &quot;nur&quot; eine MsgBox, die &quot;Hello from VBA&quot; ausgibt.      2. Schritt: Makro von VSTO aus starten  Auch dies ist sehr einfach - versprochen. Hierf&#252;r ben&#246;tigt man lediglich den Run Aufruf. Das einzige Problem d&#252;rfte f&#252;r C#-Entwickler entstehen, da f&#252;r die &#220;bergabeparameter alles als optionale Parameter &#252;bergeben wird. Dies bedeutet das der Methodenaufruf 31 Parameter hat, wovon wir jedoch nur 1 ben&#246;tigen - und 30 mal &quot;System.Type.Missing&quot; angeben.   Das ganze funktioniert durch einen Klick auf den Ribbon Button:  private void button1_Click(object sender, RibbonControlEventArgs e)
{
    Globals.ThisAddIn.Application.Run(&quot;Interop.xlsm!Module1.add&quot;, System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing);

}

War doch einfach, nicht wahr?
</description>
			<link>http://blogs.ppedv.de/mariom/archive/Von-VBA-nach-VSTO-Viele-Wege-fuumlhren-nach-...-.Net</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Wed, 27 Aug 2008 15:15:19 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] SmartTags in Office aktivieren/deaktivieren</title>
			<description>Sollte der selbst entwickelte Smarttag nicht funktionieren, so muss es sich nicht gleich um einen Fehler handeln! Es kann auch sein das die SmartTags nicht aktiviert sind. Dies geht sehr einfach:  1.) Office Men&#252; aufrufen: Word/Excel Optionen     2.) Dokumentpr&#252;fung aufrufen     3.) SmartTags der Autokorrekturoptionen      Hier muss &quot;Daten mit Smarttags beschriften&quot; aktiviert sein.</description>
			<link>http://blogs.ppedv.de/mariom/archive/SmartTags-in-Office-aktivierendeaktivieren</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Tue, 26 Aug 2008 11:44:05 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>Office</category><category>VSTO</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] SmartTags mit Application Level AddIns fr Office Programmieren</title>
			<description>Wie im vorigen Post bereits erw&#228;hnt, gibt es nun die M&#246;glichkeit SmartTags f&#252;r Application Level PlugIns zu entwickeln. (Vorher war es nat&#252;rlich auch schon m&#246;glich, allerdings nicht so einfach)  Wie dies nun im Quellcode aussieht m&#246;chte ich an dieser Stelle nun (als VSTO-Rebell mache ich es mit C# anstelle von VB) verdeutlichen.  Smarttags kommen in Office aus dem &quot;Tools&quot; Namespace - dieser ist zwar in C# mit an Board, jedoch gibt es in weiterer Folge einige Probleme damit. Daher m&#252;ssen wir diesen in einen Namespace rein geben. Ich mache dies normalerweise mit &quot;Smart&quot; (Nat&#252;rlich kann man das auch anders umgehen, aber ich will diese L&#246;sung zeigen)  using Smart = Microsoft.Office.Tools.Excel;



Ein SmartTag kommt in nun aus der Klasse &quot;SmartTag&quot; - wie sollte es auch anders sein. Was bei einem SmartTag zu ber&#252;cksichtigen ist, ist dass dieser einen eindeutigen Namen ben&#246;tigt - am besten als URI Angabe. Dieser Name muss dann auch noch mit einer Raute (#) getrennt werden. Schlussendlich ben&#246;tigt dieser noch einen Titel. 

private Smart.SmartTag MyCars;

... und erstellen (am besten in &quot;StartUp&quot;)

private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            MyCars = new Smart.SmartTag(&quot;mario.mh.autos#garage&quot;, &quot;Meine Autos&quot;);

danach werden W&#246;rter ben&#246;tigt, anhand welchen ein SmartTag erkannt wird. Dies funktioniert mit der Terms-Auflistung:

MyCars.Terms.AddRange(new string[]{&quot;BMW&quot;, &quot;Audi&quot;, &quot;Mercedes&quot;});


&#160;

Wollen wir nun auf eine Eingabe reagieren, so kann man Actions hinzuf&#252;gen. Hierf&#252;r m&#252;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&#246;st hat. Dies ist in den EventArgs mit &quot;e.Text&quot; gekennzeichnet.

MyAction1 = new Smart.Action(&quot;Auto kaufen&quot;);
MyAction1.Click += new Smart.ActionClickEventHandler(MyAction1_Click);

MyAction2 = new Smart.Action(&quot;Vertragswerkst&#228;tte suchen&quot;);
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 == &quot;Mercedes&quot;) System.Windows.Forms.MessageBox.Show(&quot;Ein Mercedes geht doch nicht kaputt!&quot;);
    else System.Windows.Forms.MessageBox.Show(&quot;Vertragswerkst&#228;tte wurde verst&#228;ndigt&quot;);
}

  (Nein, ich werde nicht von Mercedes bezahlt) Schlussendlich muss der Smarttag nur noch hinzugef&#252;gt werden:

  this.VstoSmartTags.Add(MyCars);
  

Beweis:

 

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(&quot;mario.mh.autos#garage&quot;, &quot;Meine Autos&quot;);
            MyCars.Terms.AddRange(new string[]{&quot;BMW&quot;, &quot;Audi&quot;, &quot;Mercedes&quot;});

            MyAction1 = new Smart.Action(&quot;Auto kaufen&quot;);
            MyAction1.Click += new Smart.ActionClickEventHandler(MyAction1_Click);

            MyAction2 = new Smart.Action(&quot;Vertragswerkst&#228;tte suchen&quot;);
            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 == &quot;Mercedes&quot;) System.Windows.Forms.MessageBox.Show(&quot;Ein Mercedes geht doch nicht kaputt!&quot;);
            else System.Windows.Forms.MessageBox.Show(&quot;Vertragswerkst&#228;tte wurde verst&#228;ndigt&quot;);
        }

        void MyAction1_Click(object sender, Smart.ActionEventArgs e)
        {
            System.Windows.Forms.MessageBox.Show(&quot;Auto wurde gekauft&quot;);
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        #region VSTO generated code

        /// &lt;summary&gt;
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// &lt;/summary&gt;
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }
        
        #endregion
    }
}
        
    
  </description>
			<link>http://blogs.ppedv.de/mariom/archive/SmartTags-mit-Application-Level-AddIns-fuumlr-Office-Programmieren</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Tue, 26 Aug 2008 11:32:06 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>C#</category><category>Office</category><category>VSTO</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Neuerungen mit dem SP1 fr VSTO</title>
			<description>SP1 f&#252;r Visual Studio ist da, doch was hat sich da f&#252;r die Office Entwickler getan? Nun, neben behobenen Bugs gibt es sonst auch noch ein paar neue Features. Viele der Neuerungen betreffen die Installation. Eine dieser Neuerungen ist, dass die PIA&apos;s (Primary Interop Assemblies) automatisch selektiert werden. Ferner unterst&#252;tzt das .Net Framework nun auch ein &quot;Client Profile&quot;. Dies bedeutet, das alles was nicht f&#252;r einen Client Rechner ben&#246;tigt wird nicht im .Net Redistributeable drin ist - und dadurch eine Installation kleiner wird.  Ein ganz nettes Feature f&#252;r Administratoren ist die M&#246;glichkeit, Installationsvorg&#228;nge von VSTO-Applikationen im Windows Event Viewer anzuzeigen. Dies kann speziell bei Problemen hilfreich sein.  Mein absolutes Lieblingsfeature ist jedoch die M&#246;glichkeit, SmartTags und Host Controls zu Add-In Projekten hinzuzuf&#252;gen (in Office gibt es ja bekanntlich Document Level und Application Level Projekte; wer das nicht kennt einfach mich fragen ;)). Dies war meiner Meinung nach lange Zeit ein Problem, das es nur mit Document Level ging. Nun geh&#246;rt dies der Vergangenheit an.  In diesem Sinne, viel Spa&#223; bei der Office Entwicklung.</description>
			<link>http://blogs.ppedv.de/mariom/archive/Neuerungen-mit-dem-SP1-fuumlr-VSTO</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Tue, 26 Aug 2008 11:03:05 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>Office</category><category>VSTO</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Office Developer: Word Range, Sentences und Words</title>
			<description>Eine der grundlegenden Eigenschaften von Word in der VSTO Entwicklung ist die Unterteilung in Ranges, Sentences und Words. W&#228;hrend diese Unterteilung f&#252;r Sentences und Words bereits selbsterkl&#228;rend ist, so ist die Range nicht auf dieses Begrenzt. Eine Range hat - &#228;hnlich wie in Excel - einen Bereich, in welchen interagiert werden kann. Dies kann sich nun Beispielsweise auf mehrere W&#246;rter oder auch S&#228;tze erstrecken. Will man nun einzelne S&#228;tze oder W&#246;rter ausgeben, so liefert die Sentences und Words-Auflistung auch jeweils wieder ein Range Objekt. Wenn man &#252;ber die S&#228;tze auf einzelne W&#246;rter zugreift, so ist dies auch wiederum ein Range Objekt. W&#246;rter bestehen &#252;brigens aus Chars, welche auch wieder ein Range Objekt sind.   Will man nun alle S&#228;tze und W&#246;rter durchiterieren, so k&#246;nnte dies folgenderma&#223;en aussehen (C#):  private void ThisDocument_Startup(object sender, System.EventArgs e)    {    &#160;&#160;&#160; foreach (Word.Range r in Application.ActiveDocument.Sentences)    &#160;&#160;&#160; {    &#160;&#160;&#160;&#160;&#160;&#160;&#160; MessageBox.Show(r.Text);        &#160;&#160;&#160;&#160;&#160;&#160;&#160; Debug.WriteLine(&quot;###################################&quot;);        &#160;&#160;&#160;&#160;&#160;&#160;&#160; foreach (Word.Range r2 in r.Words)    &#160;&#160;&#160;&#160;&#160;&#160;&#160; {    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Debug.WriteLine(r2.Text);        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //Auch noch in Chars m&#246;glich!!!     &#160;&#160;&#160;&#160;&#160;&#160;&#160; }    &#160;&#160;&#160; }    }   &#160;  oder so (VB)  Private Sub Word()
    For Each s As Word.Range In Application.ActiveDocument.Sentences
        &apos;Sentences -&gt; words -&gt; Characters
        MessageBox.Show(s.Text)
    Next
End Sub
</description>
			<link>http://blogs.ppedv.de/mariom/archive/Office-Developer-Word-Range-Sentences-und-Words</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Sun, 22 Jun 2008 16:53:57 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Excel und C#: Das Range Objekt</title>
			<description>Wenn man Application Level Plugins f&#252;r Excel mit C# schreibt, so wird man gleich feststellen, das das &quot;Range&quot; Objekt auf einem Worksheet nicht vorhanden ist bzw. nicht zugreifbar ist - zumindest mit Intellisense. Wenn man jedoch &quot;xxx.Range&quot; eingibt, so wird keine Meldung angezeigt, das es nicht vorhanden ist. Statt dessen kommt eine Meldung das man &quot;get_Range&quot; verwenden soll.     Mit get_Range funktioniert es schlussendlich auch in C#. Wichtig ist hierbei, dass als 2. Parameter &quot;System.Type.Missing&quot; &#252;bergeben wird, wenn dieser nicht ben&#246;tigt wird.  W&#252;rde man nun vom Ribbon (Annahme: Klick auf einem Button) auf den ActiveSheet zugreifen, so w&#252;rde das folgenderma&#223;en aussehen:  void button_Click(object sender, RibbonControlEventArgs e)
{
    Microsoft.Office.Interop.Excel.Worksheet _sheet = Globals.ThisAddIn.Application.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;
    Microsoft.Office.Interop.Excel.Range _range;

    if (null != _sheet)
    {
        _range = _sheet.get_Range(&quot;A1&quot;, System.Type.Missing);
        _range.Value2 = ((RibbonButton)sender).Label;
        _range.AddComment(&quot;Dies wurde automatisiert eingef&#252;gt&quot;);
    }
}
</description>
			<link>http://blogs.ppedv.de/mariom/archive/Excel-und-C-Das-Range-Objekt</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Sat, 21 Jun 2008 18:40:55 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>C#</category><category>Office</category><category>VSTO</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Update requires a valid UpdateCommand when passed DataRow collection with modified rows.</title>
			<description>Die Meldung &quot;Update requires a valid UpdateCommand when passed DataRow collection with modified rows.&quot; ist die Standard-Meldung, welche man erh&#228;lt wenn man eine Datenbindung neu erstellt. Die L&#246;sung ist ganz einfach: Es wurde kein UpdateCommand an das DataSet &#252;bergeben. Eine m&#246;gliche L&#246;sung sieht folgenderma&#223;en aus:  DataSet Designer &#246;ffnen     Dies ist im Normalfall die &quot;...DataSet.xsd&quot;. Hierbei selektiert man den &quot;customersTableAdapter&quot; (Name ist abh&#228;ngig von der Konfiguration) und selektiert in den Eigenschaften das Update Command. Hierbei muss man ein neues Command erstellen. Dazu gen&#252;gt ein Klick in den Text:     und schon erscheint der Designer. Im Designer f&#252;gt man die gew&#252;nschte Tabelle hinzu und selektiert alle gew&#252;nschten Felder. Dies ist jedoch immer noch nicht alles. Damit das ganze nun wirklich funktioniert, m&#252;ssen noch die Attribute eingef&#252;gt werden. In diesem Beispiel tragen die Attribute den selben Namen wie deren Feldname in der Datenbank.      Im Anschluss daran m&#252;ssen die Attribute noch gesetzt werden. Dies geschieht auch im UpdateCommand, durch Klick auf &quot;Parameters&quot;     Dort gibt man nun die Parameter an, so wie im Query Builder benannt.     So, nun sollte auch dies funktionieren ;)</description>
			<link>http://blogs.ppedv.de/mariom/archive/Update-requires-a-valid-UpdateCommand-when-passed-DataRow-collection-with-modified-rows.</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Sat, 21 Jun 2008 17:12:00 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>C#</category><category>Office</category><category>VSTO</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Dynamisches fllen von Meneintrgen in Office Ribbon (Excel)</title>
			<description>Das Men&#252; des Office Ribbons unterst&#252;tzt auch eine M&#246;glichkeit, Eintr&#228;ge dynamisch - also zur Laufzeit - zu laden. Hierf&#252;r muss die &quot;Dynamic&quot; Einstellung in Visual Studio (erreicht man durch Klick auf das Men&#252;-Control am Ribbon - Eigenschaften) auf &quot;True&quot; gesetzt sein.      &#160;  Um neue Eintr&#228;ge einzuf&#252;gen, wird die &quot;Items.Add&quot; Methode verwendet. Wie dies genau aussehen kann, wird im folgenden Beispiel demonstriert. Hierbei wird eine SQL-Datenbank verwendet:  private void Menu_Load(object sender, RibbonUIEventArgs e)
{
    SqlConnection conn = new SqlConnection();
    SqlCommand command = new SqlCommand();
    SqlDataReader dreader;

    conn.ConnectionString = @&quot;Data Source=mario-pc&quot;sqlexpress;Initial Catalog=msdnbriefing;Integrated Security=True&quot;;
    conn.Open();

    command = new SqlCommand(&quot;SELECT name FROM dbo.customers&quot;, conn);

    dreader = command.ExecuteReader();

    while (dreader.Read())
    {
        RibbonButton button = new RibbonButton();
        button.Label = dreader.GetString(0);

        button.Click += new EventHandler&lt;RibbonControlEventArgs&gt;(button_Click);

        mnu_header.Items.Add(button);
    }

    dreader.Close();
    conn.Close();
}
</description>
			<link>http://blogs.ppedv.de/mariom/archive/Dynamisches-fuumlllen-von-Menuumleintraumlgen-in-Office-Ribbon-Excel</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Sat, 21 Jun 2008 16:15:08 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>C#</category><category>Office</category><category>VSTO</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Office Developer Serie: Outlook 2 - Was kann eigentlich das ContactItem Objekt ?</title>
			<description>Ein interessantes Objekt in Outlook ist das ContactItem Objekt. Dieses wird erstellt wenn man auf Kontakte zugreift. Dieses ContactItem speichert Informationen &#252;ber Kontakte. Erstellt wird es aus einem MAPIFolder. Bevor wir uns das Objekt genauer ansehen werden, werfen wir mal einen Blick auf das Erstellen eines ContactItem Objekts. Dieses wird aus dem Explorer von Outlook erstellt. Hierbei greift man auf die Session zu und ruft den Standard-Ordner ab. Als Wert gibt man &quot;olFolderContacts&quot; an.  Outlook.MAPIFolder contact = Application.ActiveExplorer().Session.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderContacts);    Outlook.Items itm = contact.Items;  Danach iterieren wir &#252;ber s&#228;mtliche ContactItems Objekte. Hierbei wird auch auf &quot;NULL&quot; &#252;berpr&#252;ft, um keine NullReferenceExceptions zu erhalten.  Outlook.ContactItem mi;

foreach (object o in itm)
{
    mi = o as Outlook.ContactItem;

    if (null != mi)
    {

Innerhalb dieser Abfrage werden wir uns nun einige M&#246;glichkeiten des ContactItem-Objekts ansehen. 

Jeder Kontakt kann einem gewissen Account zugeordnet werden. Dies wird &#252;ber &quot;Account&quot; ausgegeben.

Debug.Write(&quot;Account: &quot;);
Debug.WriteLine(mi.Account);
Debug.WriteLine(&quot;&quot;);

Einen Kontakt kann man auch Anlagen - ebenso wie E-Mails - hinzuf&#252;gen. Ferner k&#246;nnen Kontakte &#252;ber Kategorien verf&#252;gen.

Debug.Write(&quot;Attachment: &quot;);
Debug.Write(mi.Attachments.Count);
Debug.WriteLine(&quot;&quot;);

Debug.Write(&quot;Kategorien: &quot;);
Debug.Write(mi.Categories);
Debug.WriteLine(&quot;&quot;);

&#160;

Damit man Kontakte eindeutig identifizieren kann, gibt es eine EntryID, welche einen eindeutigen Identifier darstellt. 

Debug.Write(&quot;EntryID: &quot;);
Debug.Write(mi.EntryID);
Debug.WriteLine(&quot;&quot;);

Kontakte k&#246;nnen auch eine Wichtigkeit enthalten.

Debug.Write(&quot;Wichtigkeit: &quot;);
Debug.Write(mi.Importance);
Debug.WriteLine(&quot;&quot;);



Will man neue Kategorien hinzuf&#252;gen, so kann man dies &#252;ber ItemProperties erledigen. Hierbei gibt man den Namen an und den Typ (z.B. Text: olText). Werte kommen dann in &quot;Value&quot; rein.

mi.ItemProperties.Add(&quot;MyName&quot;, Microsoft.Office.Interop.Outlook.OlUserPropertyType.olText,
    System.Type.Missing, System.Type.Missing);

Debug.Write(&quot;Properties: &quot;);
Debug.Write(mi.ItemProperties[mi.ItemProperties.Count- 1].Value);
Debug.WriteLine(mi.ItemProperties[mi.ItemProperties.Count - 1].Name);
Debug.WriteLine(&quot;&quot;);

Man kann auch benutzerdefinierte Felder verwenden - diese sind von Outlook vorgegeben und gehen von User1 bis User4. 

mi.User1 = &quot;My Tag&quot;;
Debug.WriteLine(mi.User1);

Debug.Write(&quot;Name: &quot;);
Debug.Write(mi.FirstName);
Debug.WriteLine(&quot;&quot;);

Das ganze w&#252;rde dann auf der Konsole etwa folgenderma&#223;en aussehen:

</description>
			<link>http://blogs.ppedv.de/mariom/archive/Office-Developer-Serie-Outlook-2---Was-kann-eigentlich-das-ContactItem-Objekt-</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Thu, 05 Jun 2008 00:34:36 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>C#</category><category>Office</category><category>VSTO</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Office Developer Serie: Outlook 1</title>
			<description>Nachdem es im Netz noch sehr sp&#228;rliche Informationen zur Outlook entwicklung gibt, habe ich mich dazu entschlossen, eine Serie zum Thema Outlook Entwicklung zu starten. Hierf&#252;r sollten Kenntnisse in Outlook bereits vorhanden sein.   Im ersten Teil m&#246;chte ich herzeigen, wie man auf Ver&#228;nderungen bei Outlook-Kontakten reagiert. Als erster Schritt muss man ein &quot;ItemLoad&quot; Event hinzuf&#252;gen. Dies ist vorzugsweise im Konstruktor oder in der &quot;InternalStartup&quot; Prozedur erreichbar. Die Prozedur &quot;InternalStartup&quot; ist in der &quot;#region VSTO generated Code&quot; zu finden.  private void InternalStartup()
{
    this.Startup += new System.EventHandler(ThisAddIn_Startup);
    this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);

    this.Application.ItemLoad += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemLoadEventHandler(Application_ItemLoad);
}

Hier stellt die fett geschriebene Zeile die &#196;nderung dar. Nun wollen wir uns das Event bearbeiten. Dies sollte von Visual Studio bereits automatisch generiert worden sein.

In dieser Methode wird nun ein ContactItem erstellt. Dieses wird mit &quot;Item as Outlook.ContactItem&quot; gecastet. Wichtig ist hier, das nicht (Outlook.ContactItem)Item verwendet wird, weil sonst sehr h&#228;ufig Fehler auftreten werden - Die Methode wird n&#228;mlich auch aufgerufen wenn man z.B. eine E-Mail l&#228;dt. Danach f&#252;gen wir noch ein Event f&#252;r &quot;PropertyChange&quot; hinzu, welches dann Auftritt, wenn Eigenschaften ge&#228;ndert werden. 

void Application_ItemLoad(object Item)
{
    Outlook.ContactItem Contact = Item as Outlook.ContactItem;

    //Hier wird &#252;berpr&#252;ft, ob es ein Kontakt ist - also ob es nicht null ist
    if (null != Contact)
    {
        //Wenn es nicht null ist wird ein Change-Event hinzugef&#252;gt
        Contact.PropertyChange += new Microsoft.Office.Interop.Outlook.ItemEvents_10_PropertyChangeEventHandler(Contact_PropertyChange);
    }
}

Nun muss auch noch die Ausgabe erstellt werden. Hierf&#252;r wird einfach der String auf Debug.WriteLine ausgegeben.

void Contact_PropertyChange(string Name)
  {

  &#160;&#160;&#160; Debug.WriteLine(Name);

  }

&#160;

 

... &#196;nderungen in Outlook sehen auf der Konsole folgenderma&#223;en aus:

The thread 0x15d8 has exited with code 0 (0x0).
&apos;outlook.exe&apos; (Managed): Loaded &apos;C:&quot;Users&quot;i-mameir&quot;AppData&quot;Local&quot;assembly&quot;dl3&quot;B8DCN2QN.TBN&quot;XN32MYXR.3ZO&quot;a38af54d&quot;60e2530e_48c6c801&quot;OutlookAddIn1.DLL&apos;, Symbols loaded.
CompanyAndFullName
FullNameAndCompany
Subject
FileAs
CompanyName
JobTitle
MobileTelephoneNumber

Wichtige Information: einige &#196;nderungen (z.B. Unternehmen) l&#246;sen gleich mehrere &#196;nderungen aus. 

Ferner empfhielt es sich bei ItemClose den Handler auf &quot;PropertyChange&quot; wieder zu entfernen.</description>
			<link>http://blogs.ppedv.de/mariom/archive/Office-Developer-Serie-Outlook-1</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Wed, 04 Jun 2008 16:08:07 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>C#</category><category>Office</category><category>VSTO</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] How-To: Wie entfernt man Plug Ins aus Outlook 2007?</title>
			<description>Wer kennt das Problem nicht? Man entwickelt eben ein PlugIn f&#252;r Office mit den Visual Studio Tools for Office. Und kaum fertig will man es auch wieder los werden. Doch wie kann man PlugIns aus der jeweiligen Office Applikation entfernen? Aus Excel und Word ist dies ja noch relativ einfach, doch bei Outlook kann dies schon wesentlich komplizierter werden. Wie dies dennoch funktioniert werde ich hier nun kurz erkl&#228;ren.  In Excel/Word ist dies einfach &#252;ber den Office Button&#160; - Word Optionen/Add-Ins zu erledigen.  In Outlook wechselt man zuerst in die Extras      Dort w&#228;hlt man dann die Vertrauenseinstellungen aus (Trust Center auf Englisch). Im nun erscheinenden Dialog w&#228;hlt man die Add-Ins     Durch Klick auf &quot;COM Add-ins&quot; kann man die COM-Add ins anpassen     Damit w&#228;re dies auch Erledigt und hilft bei der Outlook-Entwicklung stark weiter.</description>
			<link>http://blogs.ppedv.de/mariom/archive/How-To-Wie-entfernt-man-Plug-Ins-aus-Outlook-2007</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Wed, 04 Jun 2008 14:50:26 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			.Net</category><category>C#</category><category>Office</category><category>VB</category><category>VSTO</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Gratis Open Source Chart Library fr Silverlight</title>
			<description>Ich habe soeben meine Chart Library f&#252;r Silverlight fertig gestellt. Diese ist auf Codeplex verf&#252;gbar und ist unter der MS PL publiziert. Die Chart Library enth&#228;lt 10 verschiedene Charts, alle mit Theming M&#246;glichkeit und anpassbarkeit. Ferner gibt es auch tolle Animationen f&#252;r die Chartlibrary.  Die Projektwebseite ist:  http://www.meirhuber.de/chartlibrary</description>
			<link>http://blogs.ppedv.de/mariom/archive/Gratis-Open-Source-Chart-Library-fuumlr-Silverlight</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Thu, 29 May 2008 11:49:09 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			ASP.NET</category><category>Blend</category><category>C#</category><category>Net News</category><category>Silverlight 2</category><category>Web</category><category>
			</category>
			
		</item>
	
		<item>
			<title>[Mario Meir-Huber] Silverlight 2.0 Vortrag</title>
			<description>Morgen, den 27. Mai 2008 werde ich an der Johannes Kepler Universit&#228;t in Linz/Donau einen Vortrag zum Thema &quot;Silverlight 2.0&quot; halten. &#220;ber euer kommen w&#252;rde ich mich sehr freuen.  Wann: Di, 27.05.2008, 18:00 Uhr     Wo: BA 9909, Universit&#228;t Linz </description>
			<link>http://blogs.ppedv.de/mariom/archive/Silverlight-2.0-Vortrag</link>
			<author>Mario Meir-Huber </author>
			<pubDate>Mon, 26 May 2008 13:51:48 GMT</pubDate>
			<category domain="http://blogs.ppedv.de?tag=">
			
			</category>
			
		</item>
	
	        </channel>
		</rss>
	
    
    

