Exemplarische Vorgehensweise: Office-Programmierung (C# und Visual Basic)

Visual Studio bietet Funktionen in C# und Visual Basic, die die Microsoft Office-Programmierung verbessern. Zu nützlichen C#-Funktionen gehören benannte und optionale Argumente und Rückgabewerte des Typs dynamic. Bei der COM-Programmierung können Sie das ref-Schlüsselwort weglassen und Zugriff auf indizierte Eigenschaften erhalten. Funktionen in Visual Basic umfassen automatisch implementierte Eigenschaften, Anweisungen in Lambdaausdrücken sowie Auflistungsinitialisierer.

Beide Sprachen ermöglichen das Einbetten von Typinformationen, wodurch Assemblys bereitgestellt werden können, die mit COM-Komponenten interagieren, ohne primäre Interop-Assemblys (PIAs) auf dem Computer des Benutzers bereitzustellen. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Einbetten von Typen aus verwalteten Assemblys.

Diese exemplarische Vorgehensweise veranschaulicht diese Funktionen im Kontext der Office-Programmierung, aber viele dieser Funktionen sind auch bei der allgemeinen Programmierung nützlich. In der exemplarischen Vorgehensweise verwenden Sie eine Excel-Add-In-Anwendung, um eine Excel-Arbeitsmappe zu erstellen. Als nächstes erstellen Sie ein Word-Dokument, das einen Link zur Arbeitsmappe enthält. Zum Schluss sehen Sie, wie Sie die PIA-Abhängigkeit aktivieren und deaktivieren können.

Erforderliche Komponenten

Auf Ihrem Computer müssen Microsoft Office Excel und Microsoft Office Word oder neuere Versionen installiert sein, um diese exemplarische Vorgehensweise ausführen zu können.

Wenn Sie ein Betriebssystem verwenden, das älter ist als Windows Vista, stellen Sie sicher, dass .NET Framework 2.0 installiert ist.

Hinweis

Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Personalisieren der IDE.

So richten Sie eine Excel-Add-In-Anwendung ein

  1. Starten Sie Visual Studio.

  2. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.

  3. Erweitern Sie im Bereich Installierte Vorlagen die Option Visual Basic oder Visual C#, erweitern Sie dann Office, und klicken Sie auf die Jahreszahl der Version des Office-Produkts.

  4. Klicken Sie im Bereich Vorlagen auf Excel<version > Add-in.

  5. Sehen Sie am oberen Rand des Bereichs Vorlagen nach, um sicherzustellen, dass .NET Framework 4 oder eine höhere Version im Feld Zielframework angezeigt wird.

  6. Geben Sie, wenn gewünscht, einen Namen für das Projekt in das Feld Name ein.

  7. Klicken Sie auf OK.

  8. Das neue Projekt wird im Projektmappen-Explorer angezeigt.

So fügen Sie Verweise hinzu

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, und klicken Sie dann auf Verweis hinzufügen. Das Dialogfeld Verweis hinzufügen wird angezeigt.

  2. Wählen Sie auf der Registerkarte Assemblys die Option Microsoft.Office.Interop.Excel, Version <version>.0.0.0 (einen Schlüssel für die Versionsnummer des Office-Produkts finden Sie unter Microsoft Versions (in englischer Sprache)), in der Liste Komponentenname aus, und halten Sie dann die STRG-Taste gedrückt, während Sie Microsoft.Office.Interop.Word, version <version>.0.0.0 auswählen. Wenn keine Assemblys sichtbar sind, müssen Sie unter Umständen sicherstellen, dass sie installiert sind und angezeigt werden (siehe Vorgehensweise: Installieren von primären Interopassemblys für Office).

  3. Klicken Sie auf OK.

So fügen Sie erforderliche Imports-Anweisungen oder using-Anweisungen hinzu

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Datei ThisAddIn.vb oder ThisAddIn.cs, und klicken Sie dann auf Code anzeigen.

  2. Fügen Sie die folgenden Imports-Anweisungen (Visual Basic) oder using-Direktiven (C#) am Anfang der Codedatei ein, wenn sie noch nicht vorhanden sind.

    [!code-cscsOfficeWalkthrough#1] [!code-vbcsOfficeWalkthrough#1]

So erstellen Sie eine Liste mit Bankkonten

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, klicken Sie auf Hinzufügen und dann auf Klasse. Benennen Sie die Klasse "Account.vb", wenn Sie Visual Basic verwenden, oder "Account.cs", wenn Sie C# verwenden. Klicken Sie auf Hinzufügen.

  2. Ersetzen Sie die Definition der Account-Klasse durch den folgenden Code. Die Klassendefinitionen verwenden automatisch implementierte Eigenschaften. Weitere Informationen finden Sie unter Automatisch implementierte Eigenschaften.

    [!code-cscsOfficeWalkthrough#2] [!code-vbcsOfficeWalkthrough#2]

  3. Fügen Sie den folgenden Code in die ThisAddIn_Startup-Methode in ThisAddIn.vb oder ThisAddIn.cs ein, um eine bankAccounts-Liste mit zwei Konten zu erstellen. Die Listendeklarationen verwenden Auflistungsinitialisierer. Weitere Informationen finden Sie unter Auflistungsinitialisierer.

    [!code-cscsOfficeWalkthrough#3] [!code-vbcsOfficeWalkthrough#3]

So exportieren Sie Daten nach Excel

  1. Fügen Sie in der gleichen Datei die folgende Methode der ThisAddIn-Klasse hinzu. Die Methode richtet eine Excel-Arbeitsmappe ein, in die die Daten exportiert werden.

    [!code-cscsOfficeWalkthrough#4] [!code-vbcsOfficeWalkthrough#4]

    Bei dieser Methode werden zwei neue C#-Funktionen verwendet. Beide Funktionen existieren bereits in Visual Basic.

    • Die Methode Add hat einen optionalen Parameter zum Angeben einer bestimmten Vorlage. Optionale Parameter, die in Visual C# 2010 neu sind, ermöglichen es Ihnen, das Argument für diesen Parameter auszulassen, wenn Sie den Standardwert des Parameters verwenden möchten. Da im vorherigen Beispiel kein Argument gesendet wurde, verwendet Add die Standardvorlage und erstellt eine neue Arbeitsmappe. Die entsprechende Anweisung in früheren Versionen von C# erfordert ein Platzhalterargument: excelApp.Workbooks.Add(Type.Missing).

      Weitere Informationen finden Sie unter Benannte und optionale Argumente.

    • Die Eigenschaften Range und Offset des range-Objekts verwenden die Funktion Indizierte Eigenschaften. Diese Funktion ermöglicht es Ihnen, diese Eigenschaften von COM-Typen zu nutzen, indem Sie die folgende typische C#-Syntax verwenden. Indizierte Eigenschaften ermöglichen es Ihnen außerdem, die Value-Eigenschaft des Range-Objekts zu verwenden, sodass Sie die Value2-Eigenschaft nicht mehr verwenden müssen. Die Value-Eigenschaft ist indiziert, der Index ist jedoch optional. Optionale Argumente und indizierte Eigenschaften arbeiten im folgenden Beispiel zusammen.

      // Visual C# 2010 provides indexed properties for COM programming.
      excelApp.Range["A1"].Value = "ID";
      excelApp.ActiveCell.Offset[1, 0].Select();
      

      In früheren Versionen der Sprache ist die folgende spezielle Syntax erforderlich.

      // In Visual C# 2008, you cannot access the Range, Offset, and Value
      // properties directly.
      excelApp.get_Range("A1").Value2 = "ID";
      excelApp.ActiveCell.get_Offset(1, 0).Select();
      

      Sie können nicht Ihre eigenen indizierten Eigenschaften erstellen. Die Funktion unterstützt nur die Nutzung vorhandener indizierter Eigenschaften.

      Weitere Informationen finden Sie unter Vorgehensweise: Indizierte Eigenschaften bei der COM-Interop-Programmierung.

  2. Fügen Sie den folgenden Code am Ende von DisplayInExcel hinzu, um die Spaltenbreite an den Inhalt anzupassen.

    [!code-cscsOfficeWalkthrough#7] [!code-vbcsOfficeWalkthrough#7]

    Diese Ergänzungen veranschaulichen eine weitere Funktion in C#: die Behandlung von Object-Werten, die von COM-Hosts wie z.B. Office zurückgegeben wurden, als wären sie vom Typ dynamic. Dies geschieht automatisch, wenn Einbetten von Interop-Typen auf den Standardwert True festgelegt ist oder gleichermaßen wenn die /link-Compileroption auf die Assembly verweist. Der Typ dynamic ermöglicht eine späte Bindung, bereits in Visual Basic verfügbar, und vermeidet die in Visual C# 2008 und in früheren Sprachversionen erforderliche explizite Umwandlung.

    excelApp.Columns[1] gibt z.B.Object zurück, und AutoFit ist eine Range-Methode von Excel. Ohne dynamic müssen Sie das von excelApp.Columns[1] zurückgegebene Objekt als eine Instanz von Range umwandeln, bevor Sie die Methode AutoFit aufrufen.

    // Casting is required in Visual C# 2008.
    ((Excel.Range)excelApp.Columns[1]).AutoFit();
    
    // Casting is not required in Visual C# 2010.
    excelApp.Columns[1].AutoFit();
    

    Weitere Informationen zum Einbetten von Interop-Typen finden Sie in den Verfahren "So suchen Sie den PIA-Verweis" und "So stellen Sie die PIA-Abhängigkeit wieder her" weiter unten in diesem Thema. Weitere Informationen zu dynamic finden Sie unter dynamic oder Verwenden von dynamischen Typen.

So rufen Sie DisplayInExcel auf

  1. Fügen Sie den folgenden Code am Ende der ThisAddIn_StartUp-Methode hinzu. Der Aufruf von DisplayInExcel enthält zwei Argumente. Das erste Argument ist der Name der Liste mit Konten, die verarbeitet werden sollen. Das zweite Argument ist ein mehrzeiliger Lambda-Ausdruck, der definiert, wie die Daten verarbeitet werden. Die ID- und balance-Werte für jedes Konto werden in angrenzenden Zellen angezeigt, und die Zeile wird rot dargestellt, wenn der Saldo kleiner als Null ist. Weitere Informationen finden Sie unter Lambda Expressions (Lambdaausdrücke).

    [!code-cscsOfficeWalkthrough#9] [!code-vbcsOfficeWalkthrough#9]

  2. Drücken Sie F5, um das Programm auszuführen. Ein Excel-Arbeitsblatt wird mit den Kontendaten angezeigt.

So fügen Sie ein Word-Dokument hinzu

  1. Fügen Sie den folgenden Code am Ende der ThisAddIn_StartUp-Methode hinzu, um ein Word-Dokument zu erstellen, das einen Link zur Excel-Arbeitsmappe enthält.

    [!code-cscsOfficeWalkthrough#10] [!code-vbcsOfficeWalkthrough#10]

    Dieser Code veranschaulicht mehrere der neuen Funktionen in C#: die Möglichkeit, das ref-Schlüsselwort in der COM-Programmierung auszulassen, benannte Argumente sowie optionale Argumente. Diese Funktionen sind bereits in Visual Basic vorhanden. Die Methode PasteSpecial verfügt über sieben Parameter, die als optionale Verweisparameter definiert sind. Benannte und optionale Argumente ermöglichen es Ihnen, die Parameter festzulegen, auf die Sie namentlich zugreifen möchten, und Argumente nur an diese Parameter zu senden. In diesem Beispiel werden Argumente gesendet, um anzugeben, dass ein Link zur Arbeitsmappe in der Zwischenablage erstellt werden soll (Parameter Link) und dass der Link im Word-Dokument als Symbol angezeigt werden soll (Parameter DisplayAsIcon). Visual C# ermöglicht auch das Weglassen des ref-Schlüsselworts für diese Argumente.

So führen Sie die Anwendung aus

  1. Drücken Sie F5, um die Anwendung auszuführen. Excel wird gestartet und zeigt eine Tabelle mit den Informationen der beiden Konten in bankAccounts an. Anschließend wird ein Word-Dokument angezeigt, das einen Link zur Excel-Tabelle enthält.

So bereinigen Sie das abgeschlossene Projekt

  1. Klicken Sie in Visual Studio auf Projektmappe bereinigen im Menü Erstellen. Andernfalls wird das Add-In jedes Mal ausgeführt, wenn Sie Excel auf Ihrem Computer öffnen.

So suchen Sie den PIA-Verweis

  1. Führen Sie die Anwendung erneut aus, klicken Sie jedoch nicht auf Projektmappe bereinigen.

  2. Wählen Sie Start aus. Suchen Sie Microsoft Visual Studio <version> und öffnen Sie eine Developer-Eingabeaufforderung.

  3. Geben Sie im Fenster „Visual Studio-Eingabeaufforderung“ ildasm ein, und drücken Sie dann die EINGABETASTE. Das IL DASM-Fenster wird angezeigt.

  4. Klicken Sie im IL DASM-Fenster im Menü Datei auf Datei > Öffnen. Doppelklicken Sie auf Visual Studio <version> und dann noch einmal auf Projekte. Öffnen Sie den Ordner für das Projekt, und suchen Sie im Ordner „bin/Debug“ nach der Datei Projektname.dll. Doppelklicken Sie auf Projektname.dll. In einem neuen Fenster werden die Attribute Ihres Projekts sowie Verweise auf andere Module und Assemblys angezeigt. Beachten Sie, dass die Namespaces Microsoft.Office.Interop.Excel und Microsoft.Office.Interop.Word in der Assembly enthalten sind. Standardmäßig importiert der Compiler in Visual Studio die benötigten Typen aus einer referenzierten PIA in Ihre Assembly.

    Weitere Informationen finden Sie unter Vorgehensweise: Ansichtsassemblyinhalt.

  5. Doppelklicken Sie auf das Symbol MANIFEST. Es wird ein Fenster angezeigt, das eine Liste von Assemblys enthält, die vom Projekt referenzierte Elemente enthalten. Microsoft.Office.Interop.Excel und Microsoft.Office.Interop.Word sind nicht in der Liste enthalten. Da die Typen, die das Projekt benötigt, in die Assembly importiert wurden, sind keine Verweise auf eine PIA erforderlich. Dadurch wird die Bereitstellung vereinfacht. Die PIAs müssen nicht auf dem Computer des Benutzers vorhanden sein, und da für eine Anwendung keine bestimmte PIA-Version bereitgestellt werden muss, können die Anwendungen so konzipiert sein, dass sie mit mehreren Versionen von Office funktionieren, sofern die erforderlichen APIs in allen Versionen vorhanden sind.

    Da die Bereitstellung von primären Interop-Assemblys nicht mehr benötigt wird, können Sie eine Anwendung in erweiterten Szenarien erstellen, bei denen mehrere Versionen von Office, einschließlich früherer Versionen, verwendet werden. Dies funktioniert jedoch nur, wenn Ihr Code keine APIs verwendet, die nicht in der Version von Office verfügbar sind, mit der Sie arbeiten. Es ist nicht immer klar, ob eine bestimmte API in einer früheren Version verfügbar war; daher wird die Arbeit mit früheren Office-Versionen nicht empfohlen.

    Hinweis

    Office hat vor Office 2003 keine PIAs veröffentlicht. Aus diesem Grund besteht die einzige Möglichkeit zum Generieren einer Interop-Assembly für Office 2002 oder früheren Versionen darin, den COM-Verweis zu importieren.

  6. Schließen Sie das Manifest-Fenster und das Assembly-Fenster.

So stellen Sie die PIA-Abhängigkeit wieder her

  1. Klicken Sie im Projektmappen-Explorer auf die Schaltfläche Alle Dateien anzeigen. Erweitern Sie den Ordner Verweise, und wählen Sie Microsoft.Office.Interop.Excel aus. Drücken Sie F4, um das Fenster Eigenschaften anzuzeigen.

  2. Ändern Sie im Fenster Eigenschaften die Eigenschaft Einbetten von Interop-Typen von True zu False.

  3. Wiederholen Sie die Schritte 1 und 2 in dieser Prozedur für Microsoft.Office.Interop.Word.

  4. Kommentieren Sie in C# die beiden Aufrufe von Autofit am Ende der DisplayInExcel-Methode aus.

  5. Drücken Sie F5, um sicherzustellen, dass das Projekt immer noch ordnungsgemäß ausgeführt wird.

  6. Wiederholen Sie die Schritte 1 bis 3 der vorherigen Prozedur, um das Assembly-Fenster zu öffnen. Beachten Sie, dass Microsoft.Office.Interop.Word und Microsoft.Office.Interop.Excel nicht mehr in der Liste der eingebetteten Assemblys sind.

  7. Doppelklicken Sie auf das Symbol MANIFEST, und führen Sie einen Bildlauf durch die Liste der referenzierten Assemblys durch. Microsoft.Office.Interop.Word und Microsoft.Office.Interop.Excel befinden sich in der Liste. Da die Anwendung auf die Excel- und Word-PIAs verweist und die Eigenschaft Einbetten von Interop-Typen auf False gesetzt ist, müssen beide Assemblys auf dem Computer des Endbenutzers vorhanden sein.

  8. Klicken Sie in Visual Studio im Menü Erstellen auf Projektmappe bereinigen, um das abgeschlossene Projekt zu bereinigen.

Siehe auch

Automatisch implementierte Eigenschaften
Automatisch implementierte Eigenschaften
Auflistungsinitialisierer
Objekt- und Auflistungsinitialisierer
Optionale Parameter
Übergeben von Argumenten nach Position und Name
Benannte und optionale Argumente
Frühes und spätes Binden
dynamic
Verwenden von dynamischen Typen
Lambda Expressions (Lambdaausdrücke)
Lambda Expressions (Lambdaausdrücke)
Vorgehensweise: Indizierte Eigenschaften bei der COM-Interop-Programmierung
Exemplarische Vorgehensweise: Einbetten von Typinformationen aus Microsoft Office-Assemblys
Exemplarische Vorgehensweise: Einbetten von Typen aus verwalteten Assemblys
Exemplarische Vorgehensweise: Erstellen des ersten VSTO-Add-Ins für Excel
COM-Interop
Interoperabilität