Zugreifen auf Webdienste mit Excel über Visual Studio-Tools für Microsoft Office System

Zugreifen auf Webdienste mit Excel über Visual Studio-Tools für Microsoft Office System

Veröffentlicht: 21. Jun 2004 | Aktualisiert: 15. Nov 2004
Von

Dieser Artikel beschreibt, wie Sie einen Webdienst zu Börseninformationen mithilfe von Visual Studio-Tools für Microsoft Office System in ein Excel 2003-Arbeitsblatt übernehmen.

Auf dieser Seite

Einführung Einführung
Voraussetzungen Voraussetzungen
Erstellen eines Excel-Projekts in Visual Studio .NET Erstellen eines Excel-Projekts in Visual Studio .NET
Hinzufügen des Webverweises Hinzufügen des Webverweises
Vorbereiten der Excel-Arbeitsmappe Vorbereiten der Excel-Arbeitsmappe
Codieren von "OfficeCodeBehind" Codieren von "OfficeCodeBehind"
Ausführung Ausführung
Schlussfolgerung Schlussfolgerung

Einführung

Entwicklern steht jetzt ein besonders leistungsstarkes Tool zur Verfügung, mit dem sie intelligente Clientanwendungen für Microsoft Office 2003 erstellen können: Visual Studio-Tools für Microsoft Office System. Dank dieses Add-Ins für Microsoft Visual Studio .NET 2003 kann ein Entwickler verwaltete DLLs für bestimmte Office 2003-Vorlagen ohne großen Aufwand erstellen. Die erstellte DLL wird anschließend mit einer bestimmten Microsoft Office Excel- oder Microsoft Office Word-Datei verknüpft. Sobald die Datei geöffnet wird, wird die DLL im Hintergrund geladen. Der Entwickler kann dann die Microsoft .NET Framework-Klassen zusammen mit dem Excel- oder Word-Objektmodell für das Erstellen von leistungsstarken, intelligenten Clientanwendungen verwenden.

Ein Entwickler einer Office-Vorlage kann sich die integrierte Entwicklungsumgebung (Integrated Development Environment, IDE) von Visual Studio .NET und den leistungsfähigen Debugger zu Nutze machen. Der zusätzliche Nutzen einer Entwicklung in verwaltetem Code bedeutet mehr Kontrolle durch den Entwickler über den Speicher, die Typumwandlung usw. In diesem Artikel erläutere ich Ihnen die einzelnen Schritte des Zugriffs auf einen Börsenwebdienst und des Verknüpfens dieses Webdienstes mit einer Excel 2003-Anwendung (ich werde die Verwendung der Daten nicht erörtern; gebrauchen Sie dazu Ihre Fantasie). Gute Kenntnisse in der Microsoft .NET Framework-Programmierung werden vorausgesetzt.

Voraussetzungen

Zunächst müssen Sie sicherstellen, dass alle Teile installiert sind. Ich kann diese hier nicht in allen Einzelheiten auflisten, aber vergewissern Sie sich, dass alles Wichtige in der richtigen Reihenfolge betriebsbereit installiert ist. Weitere Informationen finden Sie unter How to: Install Visual Studio Tools for the Microsoft Office System (in Englisch).

Erstellen eines Excel-Projekts in Visual Studio .NET

Aus mehreren Gründen nehme ich diese Entwicklung in Microsoft Visual Basic .NET und nicht in Microsoft Visual C# vor. Erstens, Visual Basic .NET unterstützt optionale Parameter. C# tut dies nicht. Das heißt, C#-Entwickler müssen für jeden optionalen Parameter Werte in eine Office-Methode eingeben. Entwickler in Visual Basic .NET müssen nur Parameter für die gerade benötigten Werte eingeben. Außerdem verfügen C#-Entwickler im Vergleich zu Visual Basic .NET-Entwicklern über anders geartete Accessor-Methoden, da C# keine Parameter für Eigenschaften (Indexer sind die Ausnahme) unterstützt. Ich empfehle die Verwendung von Visual Basic .NET, da ich ausschweifenden Code hasse.

Erstellen Sie in Visual Studio .NET ein neues Visual Basic Office-Projekt für Excel.

So erstellen Sie ein neues Excel-Arbeitsmappenprojekt

  1. Zeigen Sie im Menü Datei auf Neu, und klicken Sie auf Projekt. Das Dialogfeld Neues Projekt wird angezeigt.
    ZugreifenAufWebdienstemitExcelUeberVisualStudioTools_01.gif
    Abbildung 1. Dialogfeld "Neues Projekt" in Visual Studio .NET

  2. Erweitern Sie im Fenster Projekttypen den Knoten Microsoft Office System Projekte und wählen Sie Visual Basic-Projekte.

  3. Wählen Sie im Fenster Vorlagen die Option Excel Arbeitsblatt.

  4. Geben Sie dem Projekt einen Namen und speichern Sie es im entsprechenden lokalen Pfad.

    Meines heißt WebServiceStockExcelProject, aber Sie können es natürlich nach Belieben benennen.

  5. Übernehmen Sie die Vorgabewerte in Microsoft Office-Projekt-Assistent und klicken Sie auf Fertig stellen, um das Projekt zu erstellen.

Bitte beachten Sie, dass der selbst generierte Code Ihrer Klasse bereits den Namen OfficeCodeBehind gegeben hat. Den Namen dürfen Sie abändern. Damit erhalten Sie auch Zugriff auf zwei verwandte Objekte: ThisWorkbook und ThisApplication. Über diese beiden Objekte greifen Sie zu gegebener Zeit auf die Excel-Anwendung zu. Aufgrund der Verknüpfungen im verwalteten Code wird der Code automatisch mit Hochfahren der Office-Anwendung gestartet. Wenn die Office-Anwendung heruntergefahren wird, wird gleichzeitig auch der Code beendet (Sie müssen also keine COM-Objekte marshallen).

Hinzufügen des Webverweises

Fügen Sie zunächst den Webverweis dem Ordner Projektverweise hinzu.

So fügen Sie einen Webverweis hinzu

  1. Klicken Sie im Menü Projekt auf Webverweis hinzufügen.

  2. Sie verwenden in Ihrem Code den kostenfreien Webdienst http://www.nexus6studio.org/Services/StockQoute.asmx?WSDL. Berücksichtigen Sie, dass dies ein kostenfreier Dienst ist, der u.U. aktuell nicht mehr verfügbar ist. Geben Sie die URL hier ein und klicken Sie auf Gehe zu:
    02.gif
    Abbildung 2. Hinzufügen eines Webverweises

    Sie befassen sich hier nur mit GetDetailQuote und der Struktur DetailQuote, die zurückgegeben wird.

  3. Klicken Sie auf Verweis hinzufügen.
    Damit haben Sie einen Verweis auf die beiden Webdienste hergestellt.

Vorbereiten der Excel-Arbeitsmappe

Wenn der Microsoft Office-Projekt-Assistent die ursprünglichen CodeBehind-Dateien für das Projekt erstellt, legt er gleichzeitig auch eine Excel-Arbeitsmappe im Arbeitsverzeichnis an. Sie sollten dieses Element dem Projekt für ein leichtes Wiederauffinden hinzufügen.

Öffnen Sie die Arbeitsmappe und strukturieren Sie sie gemäß Abbildung 3.

Anmerkung Eine Warnung kann Ihnen ggf. anzeigen, dass der Assemblyname oder die Assembly Link Location-Eigenschaft beschädigt ist, da Sie die Assembly noch nicht kompiliert haben. Klicken Sie auf OK, um die Warnung zu schließen.
ZugreifenAufWebdienstemitExcelUeberVisualStudioTools_01.gif
Abbildung 3. Excel-Arbeitsmappe

Die einzig verzwickte Sache hierbei ist das Anlegen des Hyperlinks Börseninformationen abrufen (der Rest ist einfaches Formatieren). Der Hyperlink ist wichtig, da er den Webdienst startet. Dies erfordert mehrere Schritte:

So erstellen Sie einen Hyperlink in der Arbeitsmappe

  1. Zeigen Sie im Menü Einfügen auf Name und klicken Sie auf Definieren.

  2. Definieren Sie einen benannten Bereich als Get_Stock und legen Sie ihn als =Sheet1!$A$6-Bereich fest.

  3. Klicken Sie im Menü Einfügen auf Hyperlink, um das Fenster zum Erstellen von Hyperlinks zu öffnen.

  4. Klicken Sie im linken Bereich auf Aktuelles Dokument, wählen Sie Get_Stock als benannten Verweis und klicken Sie auf OK.

  5. Speichern und schließen Sie die Arbeitsmappe.

Codieren von "OfficeCodeBehind"

Jetzt wird es interessant. Jetzt verwenden Sie das Excel-Objektmodell, um die Webdienstwerte einzugeben und zu formatieren.

Erstellen Sie als Erstes einen Ereignishandler, der einen Klick auf den Hyperlink verarbeitet, den Sie in der Anwendung angelegt haben. Setzen Sie diese Subroutine unter die ThisWorkbook_BeforeClose-Subroutine:

Private Sub ThisApplication_SheetFollowHyperlink _ 
  (ByVal Sh As Object, ByVal Target As Excel.Hyperlink) _ 
  Handles ThisApplication.SheetFollowHyperlink 
 
    If Target.SubAddress = "Get_Stock" Then 
      GetStock(Sh) 
  End If 
 
End Sub

Diese Subroutine wird bei jedem Klick auf einen beliebigen Hyperlink in der Anwendung ausgeführt. Sie übergibt zwei Argumente. Eines davon ist Sh, das für die Excel-Arbeitsmappe steht. Das andere ist Target, das für den eigentlichen Hyperlink steht.

Erinnern Sie sich noch, wie Sie den Hyperlinkbereich für Get_Stock benannt haben? Verifizieren Sie nun, ob der Hyperlink per Klick aktiviert wurde, indem Sie das Target.SubAddress-Attribut prüfen. Falls ja, können Sie die GetStock-Subroutine aufrufen, die die Sh-Arbeitsmappenobjektvariable übergibt.

Codieren Sie jetzt die GetStock-Subroutine. Setzen Sie den Code unter die ThisApplication_ SheetFollowHyperlink-Subroutine, die zuvor codiert wurde.

Private Sub GetStock(ByVal Sh As Object) 
  Dim sheet As Excel.Worksheet = CType(Sh, Excel.Worksheet) 
  Dim stockSnapshot As New _    
    org.nexus6studio.www.Nexus6StudioStockQuote 
  Dim snapShot As org.nexus6studio.www.DetailQuote 
  Dim symbol As String = sheet.Range("F6").Value 
 
  ' This is the error message area. 
  sheet.Range("A21:H32").Merge() 
 
  Try 
    snapShot = stockSnapshot.GetDetailQuote(symbol) 
  Catch ex As Exception 
    ' You can use the Range class above, or the Cells class below. 
    ' For the Range class, you have to set the Value property. 
    ' See the examples after the Try block. 
    ' Both of these are the same: 
    ' sheet.Range("A21").Value = ex 
    sheet.Cells(21, "A") = ex 
 
  End Try 
 
  sheet.Range("E10").Value = snapShot.Bid 
  sheet.Range("E11").Value = snapShot.Ask 
  sheet.Range("E16").Value = snapShot.Open 
  sheet.Range("F14").Value = snapShot.High 
  sheet.Range("F18").Value = snapShot.Low 
  sheet.Range("F16").Value = snapShot.Price 
  sheet.Range("F16").Font.Bold = True 
  sheet.Range("F16").Font.Underline = True 
  sheet.Range("E12").Value = snapShot.Change_Points 
 
 End Sub

Sie werden bemerkt haben, dass Excel-Interop die aktuelle Arbeitsmappe als generisches Objekt darstellt. Da Sie nur umständlich mit einem generischen Objekt im Code arbeiten können, instanziieren Sie ein Objekt der Excel.Worksheet-Klasse. Und da Sie dieses "Arbeitsmappenobjekt" entschachteln, müssen Sie das Objekt explizit mit CType konvertieren.

Danach müssen Sie den Webdienst selbst und die Struktur, die den Webdienst zurückgibt, instanziieren. Das instanziierte Webdienstobjekt heißt stockSnapshot, und die instanziierte Struktur ist snapShot. Sie erhalten dann das Börsensymbol. Abbildung 3 zeigt Zelle "F6" als Einfügeort für den Ticker.

Dann machen Sie Blattbereich A21 bis H32 zum verbundenen Bereich. Damit können Sie hier aufgefangene Abweichungen platzieren.

Da Sie nicht wissen, was passiert, falls der Webdienstaufruf fehlschlägt, setzen Sie ihn in einen Try/Catch-Block. Rufen Sie im Try-Block den Webdienst auf, geben das Börsensymbol ein und gehen zur snapshot-Struktur, die die aktuellen Aktienwerte enthält.

Anmerkung Sie können auf verschiedene Weise auf Zellenwerte zugreifen, entweder über das Range-Objekt oder über das Cells-Objekt. Ich habe den Code zwar im Cells-Objekt im Catch-Block geschrieben, um die Syntax besser aufzuzeigen, bevorzuge aber das Range-Objekt. Ich denke, das Range-Objekt ist flexibler für die Bearbeitung von Zellenbereichen.

Die letzten Zeilen der Subroutine übertragen die Strukturwerte in die Kalkulationstabelle. Die Werte der Struktur sind als Zeichenfolgen definiert, Sie konvertieren sie aber dennoch nicht explizit vor dem Einfügen in die Kalkulationstabelle. Grund: Excel erledigt dies für Sie für jede in die Value-Eigenschaft gestellte Zahl.

Zur Hervorhebung des aktuellen Aktienwerts habe ich außerdem noch zwei Zeilen hinzugefügt. Ich habe die Font.Bold- und die Font.Underline-Eigenschaft auf TRUE gesetzt.

Ausführung

Sollen wir jetzt einen Durchlauf starten? Kompilieren Sie den gerade geschriebenen Code und wechseln Sie dann zum Ordner, in dem das Projekt abgelegt ist. Öffnen Sie die dort gespeicherte Excel-Datei. Dann sollte die von Ihnen erstellte Excel-Arbeitsmappe angezeigt werden. Weil mich interessiert, wie die Microsoft-Aktie steht, gebe ich den Ticker "MSFT" (oder in Kleinbuchstaben) in Zelle F6 ein, drücke die Eingabetaste und klicke auf den Hyperlink Börseninformationen abrufen. Ich erhalte dann ein Ergebnis ähnlich wie in Abbildung 4:
ZugreifenAufWebdienstemitExcelUeberVisualStudioTools_01.gif
Abbildung 4. Webdienstergebnisse

Verdammt! Der Kurs könnte besser sein.

Haben Sie Bereich A21 bis H32 beachtet? Dies ist jetzt ein großer verbundener Bereich. Genau so, wie Sie ihn im obigen Code definiert haben. Er ist bereit zum Abfangen von Abweichungen.

Schlussfolgerung

Wie Sie sehen, ist das Einbinden von Webdiensten in eine Excel 2003-Anwendung mithilfe von Visual Studio-Tools für Microsoft Office System jetzt ganz einfach. Es eröffnet eine große Palette an Möglichkeiten für diejenigen unter uns, die an den Börsen mitmischen möchten. Wir können aktuelle Daten im Hintergrund in unsere Kalkulationstabellen herunterladen, und wir können diese Daten dann nach Bedarf in Excel bearbeiten. Wir brauchen dann bloß noch eine Kristallkugel.


Anzeigen:
© 2016 Microsoft