Office & Visual Studio 2010 (Teil 2)
Kommentare

C# und das Office Objektmodell
Das .NET Framework 4.0 bringt einige Neuigkeiten für Office-Entwickler mit C#-Präferenz, über die wohl manch einer der Visual Basic-Verfechter lachen dürfte: Optionale

C# und das Office Objektmodell

Das .NET Framework 4.0 bringt einige Neuigkeiten für Office-Entwickler mit C#-Präferenz, über die wohl manch einer der Visual Basic-Verfechter lachen dürfte: Optionale und benannte Parameter.

Das Öffnen eines Dokumentes in Word über das Objektmodell verlangt nach nicht weniger als 16 Parametern. Von denen werden aber in den seltensten Fällen mehr als 3 benötigt. In C# darf dafür fröhlich System.Type.Missing übergeben werden. Eine Konstante, die darüber hinweg täuscht, dass der Parameter eigentlich gar nicht benötigt wird und nur der Selbstliebe des Compilers zu verdanken ist. Als ob das noch nicht genug wäre, möchte seine Excellence Word der 14. (die Vorgänger leider auch) die Parameter auch noch als Referenz auf ein Objekt. Da C# aber Konstanten nicht per ref übergeben kann, wird der Entwickler gezwungen, diese in eine Objektvariable zu verpacken (boxing), um dann eine Referenz darauf zu übergeben. Das klingt wenig komfortabel (Listing 1). Zwischenzeitlich gab es einen Versuch, das Dilemma mit den Office Interop API Extensions per Extension Methods zu beenden (Bestandteil der VSTO Powertools), doch bei der Vielzahl der Methoden in den Office Objektmodellen war das wohl am Ende zu komplex geworden.

string MyFileName = @"D:Samplefile.docx";
string MyPW = "VSTO_Sample";
WD.Application wdApp = new WD.Application();
wdApp.Visible = true;
Object Filename = MyFileName;
Object MissingType = Type.Missing;
Object Pasword = MyPW;
wdApp.Documents.Open( ref Filename,
                      ref MissingType,
                      ref MissingType,
                      ref MissingType,
                      ref Pasword,
                      ref MissingType,
                      ref MissingType,
                      ref MissingType,
                      ref MissingType,
                      ref MissingType,
                      ref MissingType,
                      ref MissingType,
                      ref MissingType,
                      ref MissingType,
                      ref MissingType,
                      ref MissingType);  

Aber wenn an einem Ende nichts bewegt werden kann, wird am anderen angepackt. Dass es besser geht, beweist nun .NET 4.0 (Listing 2). Die erforderlichen Änderungen wurden direkt in den Compiler eingebaut. Somit können die Parameternamen vor dem Übergabewert angegeben werden, nur durch einen Doppelpunkt getrennt. Wenn die Reihenfolge stimmt, wie z. B. beim ersten Parameter, kann sogar nur der zu übergebende Wert angegeben werden.

string MyFileName = @"D:Samplefile.docx";
string MyPW = "VSTO_Sample";
WD.Application wdApp = new WD.Application();
wdApp.Visible = true;
wdApp.Documents.Open(FileName: MyFileName, PasswordDocument: MyPW);  

Das lässt sich auch in eigenem Code nutzen. In Listing 3 wird eine Funktion MyFunc deklariert, die vier Parameter hat wovon zwei optional sind. In der Deklaration wird an dieser Stelle einfach der Standardwert definiert, der zum Einsatz kommt, wenn der Aufrufer nichts übergeben hat. Die erste Zeile im Caller übergibt nur die beiden erforderlichen Parameter in der richtigen Reihenfolge, während in der zweiten Zeile die Reihenfolge nach dem zweiten Parameter nicht mehr mit der Deklaration übereinstimmt. Deshalb muss dann der Parametername mit angegeben werden.

Damit macht Office-Entwicklung nun auch für C#-Programmierer wieder Spaß.

    
private double MyFunc(double A, double B, bool deep = true, double C = 3.14)
{
  if (deep) return A * B * C;
  else return A / B * C;
}


private void Caller()
{
  double x = MyFunc(2.3, 4.5);
         x = MyFunc(2.3, 4.5, C: 3.56, deep:false);
}  
In der dot-NET Magazin-Ausgabe 9.2010 finden Sie einen Themenschwerpunkt zu Office 2010. Das Heft liegt ab dem 4. August 2010 an den Kiosken aus und kann ab diesem Zeitpunkt auch über die Magazinseite bestellt werden.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -