Exemplarische Vorgehensweise: Abrufen zwischengespeicherter Daten aus einer Arbeitsmappe auf einem Server
Diese exemplarische Vorgehensweise veranschaulicht, wie Sie mit der ServerDocument-Klasse Daten aus dem Cache einer Microsoft Office Excel-Arbeitsmappe abrufen können, ohne Excel zu starten. Diese exemplarische Vorgehensweise stellt Schritt-für-Schritt-Anweisungen für das Verwenden des Codebeispiels bereit, das in Gewusst wie: Abrufen von zwischengespeicherten Daten aus einer Arbeitsmappe auf einem Server bereitgestellt wird.
Betrifft: Die Informationen in diesem Thema betreffen Projekte auf Dokumentebene für Excel 2007 und Excel 2010. Weitere Informationen finden Sie unter Verfügbare Funktionen nach Office-Anwendung und Projekttyp.
In dieser exemplarischen Vorgehensweise werden die folgenden Aufgaben veranschaulicht:
Definieren eines DataSets, das Daten aus der AdventureWorksLT-Datenbank enthält
Erstellen von Datasetinstanzen in einem Excel-Arbeitsmappenprojekt und einem Konsolenanwendungsprojekt
Erstellen eines ListObject, das an das Dataset in der Arbeitsmappe gebunden ist, und Auffüllen des ListObject mit Daten, wenn die Arbeitsmappe geöffnet wird
Hinzufügen des Datasets in der Arbeitsmappe zum Datencache
Lesen von Daten aus dem zwischengespeicherten Dataset in das Dataset in der Konsolenanwendung ohne Starten von Excel
Bei dieser exemplarischen Vorgehensweise wird davon ausgegangen, dass Sie den Code auf Ihrem Entwicklungscomputer ausführen. Sie können den hier demonstrierten Code jedoch auch auf einem Server verwenden, auf dem Excel nicht installiert ist.
Tipp
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. Die von Ihnen verwendete Visual Studio-Edition und die Einstellungen legen diese Elemente fest. Weitere Informationen finden Sie unter Arbeiten mit Einstellungen.
Vorbereitungsmaßnahmen
Zum Durchführen dieser exemplarischen Vorgehensweise benötigen Sie die folgenden Komponenten:
-
Eine Version von Visual Studio 2010, die die Microsoft Office-Entwicklungstools einschließt. Weitere Informationen finden Sie unter [Konfigurieren eines Computers zum Entwickeln von Office-Lösungen](bb398242\(v=vs.100\).md).
Excel 2007 oder Excel 2010
Zugriff auf eine gegenwärtig ausgeführte Instanz von Microsoft SQL Server oder Microsoft SQL Server Express, die mit der AdventureWorksLT-Beispieldatenbank verknüpft ist Sie können die AdventureWorksLT-Datenbank von der CodePlex-Website herunterladen. Weitere Informationen zum Anhängen von Datenbanken finden Sie unter den folgenden Themen:
Informationen zum Anfügen einer Datenbank mit SQL Server Management Studio oder SQL Server Management Studio Express finden Sie unter Gewusst wie: Anfügen einer Datenbank (SQL Server Management Studio).
Informationen zum Anfügen einer Datenbank über die Befehlszeile finden Sie unter Gewusst wie: Anfügen einer Datenbankdatei an SQL Server Express.
Erstellen eines Klassenbibliotheksprojekts zur Definition eines Datasets
Um dasselbe Dataset in einem Excel-Arbeitsmappenprojekt und einem Konsolenanwendungsprojekt verwenden zu können, müssen Sie es in einer separaten Assembly definieren, auf die beide Projekte verweisen. Definieren Sie für diese exemplarische Vorgehensweise das Dataset in einem Klassenbibliotheksprojekt.
So erstellen Sie ein Klassenbibliotheks-Projekt
Starten Sie Visual Studio.
Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Erweitern Sie im Vorlagenbereich Visual C# oder Visual Basic, und klicken Sie dann auf Windows.
Wählen Sie in der Liste der Projektvorlagen Klassenbibliothek aus.
Geben Sie im Feld Name Folgendes ein: AdventureWorksDataSet.
Klicken Sie auf Durchsuchen, navigieren Sie zum Ordner %UserProfile%\Eigene Dateien (Windows XP und ältere Versionen) bzw. %UserProfile%\Dokumente (Windows Vista), und klicken Sie dann auf Ordner auswählen.
Im Dialogfeld Neues Projekt muss das Kontrollkästchen Projektmappenverzeichnis erstellen deaktiviert sein.
Klicken Sie auf OK.
Visual Studio fügt das Projekt AdventureWorksDataSet dem Projektmappen-Explorer hinzu und öffnet die Codedatei Class1.cs oder Class1.vb.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Class1.cs bzw. auf Class1.vb, und klicken Sie dann auf Löschen. Diese Datei wird für diese exemplarische Vorgehensweise nicht benötigt.
Definieren eines Datasets im Klassenbibliotheksprojekt
Definieren Sie ein typisiertes DataSet, das Daten aus der AdventureWorksLT-Datenbank für SQL Server 2005 enthält. Zu einem späteren Zeitpunkt in dieser exemplarischen Vorgehensweise verweisen Sie von einem Excel-Arbeitsmappenprojekt und einem Konsolenanwendungsprojekt auf dieses DataSet.
Das Dataset ist ein typisiertes Dataset, das die Daten in der Product-Tabelle der AdventureWorksLT-Datenbank darstellt. Weitere Informationen zu typisierten Datasets finden Sie unter Arbeiten mit Datasets in Visual Studio.
So definieren Sie ein typisiertes Dataset im Klassenbibliotheksprojekt
Klicken Sie im Projektmappen-Explorer auf das Projekt AdventureWorksDataSet.
Klicken Sie im Menü Daten auf Neue Datenquelle hinzufügen.
Der Assistent zum Konfigurieren von Datenquellen wird geöffnet.
Klicken Sie auf Datenbank und anschließend auf Weiter.
Wenn eine Verbindung mit der AdventureWorksLT-Datenbank vorhanden ist, wählen Sie diese Verbindung aus, und klicken Sie auf Weiter.
Klicken Sie andernfalls auf Neue Verbindung, und erstellen Sie die neue Verbindung im Dialogfeld Verbindung hinzufügen. Weitere Informationen hierzu finden Sie unter Gewusst wie: Herstellen einer Verbindung zu Daten in einer Datenbank.
Klicken Sie auf der Seite Save the Connection String to the Application Configuration File auf Next.
Erweitern Sie auf der Seite Datenbankobjekte auswählen den Knoten Tabellen, und wählen Sie Product (SalesLT).
Klicken Sie auf Fertig stellen.
Die Datei AdventureWorksLTDataSet.xsd wird dem AdventureWorksDataSet-Projekt hinzugefügt. Diese Datei definiert die folgenden Elemente:
Ein typisiertes Dataset mit dem Namen AdventureWorksLTDataSet. Dieses Dataset stellt den Inhalt der Product-Tabelle in der AdventureWorksLT-Datenbank dar.
Ein TableAdapter mit dem Namen ProductTableAdapter. Dieser TableAdapter kann zum Lesen von Daten aus und zum Schreiben von Daten in AdventureWorksLTDataSet verwendet werden. Weitere Informationen hierzu finden Sie unter Übersicht über TableAdapters.
Zu einem späteren Zeitpunkt in dieser exemplarischen Vorgehensweise verwenden Sie beide Objekte.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf AdventureWorksDataSet, und klicken Sie dann auf Erstellen.
Überprüfen Sie, ob sich das Projekt fehlerfrei erstellen lässt.
Erstellen eines Excel-Arbeitsmappenprojekts
Erstellen Sie ein Excel-Arbeitsmappenprojekt für die Datenschnittstelle. Zu einem späteren Zeitpunkt der exemplarischen Vorgehensweise erstellen Sie ein ListObject zur Anzeige der Daten und fügen dem Datencache der Arbeitsmappe eine Instanz des Datasets hinzu.
So erstellen Sie das Excel-Arbeitsmappenprojekt
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf AdventureWorksDataSet, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Neues Projekt.
Erweitern Sie im Vorlagenbereich Visual C# oder Visual Basic, und erweitern Sie dann Office.
Wählen Sie unter dem erweiterten Knoten Office den Knoten 2007 oder 2010 aus.
Wählen Sie in der Liste der Projektvorlagen das Projekt "Excel-Arbeitsmappe" aus.
Geben Sie im Feld Name Folgendes ein: AdventureWorksReport. Ändern Sie den Speicherort nicht.
Klicken Sie auf OK.
Der Projekt-Assistent aus Visual Studio Tools for Office wird geöffnet.
Stellen Sie sicher, dass die Option Neues Dokument erstellen ausgewählt ist, und klicken Sie auf OK.
Visual Studio öffnet die Arbeitsmappe AdventureWorksReport im Designer und fügt dem Projektmappen-Explorer das Projekt AdventureWorksReport hinzu.
Hinzufügen des Datasets zu Datenquellen im Excel-Arbeitsmappenprojekt
Bevor Sie das Dataset in der Excel-Arbeitsmappe anzeigen können, müssen Sie es zunächst Datenquellen im Excel-Arbeitsmappenprojekt hinzufügen.
So fügen Sie das Dataset den Datenquellen im Excel-Arbeitsmappenprojekt hinzu
Doppelklicken Sie im Projektmappen-Explorer unter dem Projekt AdventureWorksReport auf Sheet1.cs bzw. auf Sheet1.vb.
Die Arbeitsmappe wird im Designer geöffnet.
Klicken Sie im Menü Daten auf Neue Datenquelle hinzufügen.
Der Assistent zum Konfigurieren von Datenquellen wird geöffnet.
Klicken Sie auf Objekt und anschließend auf Weiter.
Klicken Sie auf der Seite Objekt auswählen, an das Bindung hergestellt werden soll auf Verweis hinzufügen.
Klicken Sie auf der Registerkarte Projekte auf AdventureWorksDataSet, und klicken Sie dann auf OK.
Klicken Sie unter dem AdventureWorksDataSet-Namespace der AdventureWorksDataSet-Assembly auf AdventureWorksLTDataSet und dann auf Fertig stellen.
Das Fenster Datenquellen wird geöffnet, und AdventureWorksLTDataSet wird der Liste der Datenquellen hinzugefügt.
Erstellen eines an eine Instanz des Datasets gebundenen ListObject-Steuerelements
Um das Dataset in der Arbeitsmappe anzuzeigen, erstellen Sie ein ListObject, das an eine Instanz des Datasets gebunden ist. Weitere Informationen zum Binden von Steuerelementen an Daten finden Sie unter Binden von Daten an Steuerelemente in Office-Projektmappen.
So erstellen Sie ein ListObject, das an eine Instanz des Datasets gebunden ist
Erweitern Sie im Fenster Datenquellen unter AdventureWorksDataSet den Knoten AdventureWorksLTDataSet.
Wählen Sie den Knoten Product, klicken Sie auf den Dropdownpfeil, und wählen Sie dann ListObject aus der Dropdownliste.
Wenn der Dropdownpfeil nicht angezeigt wird, überprüfen Sie, ob die Arbeitsmappe im Designer geöffnet ist.
Ziehen Sie die Tabelle Product zur Zelle A1.
Ein ListObject-Steuerelement mit dem Namen productListObject wird im Arbeitsblatt beginnend mit Zelle A1 erstellt. Gleichzeitig werden dem Projekt ein Datasetobjekt mit dem Namen adventureWorksLTDataSet und eine BindingSource mit dem Namen productBindingSource hinzugefügt. Das ListObject ist an die BindingSource gebunden, die wiederum an das Datasetobjekt gebunden ist.
Hinzufügen des Datasets zum Datencache
Um Code außerhalb des Excel-Arbeitsmappenprojekts für den Zugriff auf das Dataset in der Arbeitsmappe zu aktivieren, müssen Sie das Dataset zunächst dem Datencache hinzufügen. Weitere Informationen über den Datencache finden Sie unter Zwischengespeicherte Daten in Anpassungen auf Dokumentebene und unter Zwischenspeichern von Daten.
So fügen Sie das Dataset dem Datencache hinzu
Klicken Sie im Designer auf adventureWorksLTDataSet.
Legen Sie im Eigenschaftenfenster die Modifiers-Eigenschaft auf Public fest.
Legen Sie die CacheInDocument-Eigenschaft auf True fest.
Initialisieren des Datasets in der Arbeitsmappe
Bevor Sie die Daten mit der Konsolenanwendung aus dem zwischengespeicherten Dataset abrufen können, müssen Sie zunächst das zwischengespeicherte Dataset mit Daten auffüllen.
So initialisieren Sie das Dataset in der Arbeitsmappe
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Datei Sheet1.vb bzw. die Datei Sheet1.cs, und klicken Sie anschließend auf Code anzeigen.
Ersetzen Sie den Sheet1_Startup-Ereignishandler durch folgenden Code. Dieser Code verwendet eine Instanz der ProductTableAdapter-Klasse, die im AdventureWorksDataSet-Projekt definiert ist, um das zwischengespeicherte Dataset mit Daten aufzufüllen, wenn es momentan leer ist.
Private ProductTableAdapter As New _ AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter() Private Sub Sheet1_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup If Me.NeedsFill("AdventureWorksLTDataSet") Then Me.ProductTableAdapter.Fill(Me.AdventureWorksLTDataSet.Product) End If End Sub
private AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter productTableAdapter = new AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter(); private void Sheet1_Startup(object sender, System.EventArgs e) { if (this.NeedsFill("adventureWorksLTDataSet")) { this.productTableAdapter.Fill(this.adventureWorksLTDataSet.Product); } }
Checkpoint
Erstellen Sie das Excel-Arbeitsmappenprojekt, und führen Sie es aus, um sicherzustellen, dass es fehlerfrei kompiliert und ausgeführt wird. Bei diesem Vorgang wird auch das zwischengespeicherte Dataset mit Daten aufgefüllt, und die Daten werden in der Arbeitsmappe gespeichert.
So erstellen Sie das Projekt und führen es aus
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt AdventureWorksReport, wählen Sie Debuggen, und klicken Sie dann auf Neue Instanz starten.
Das Projekt wird erstellt, und die Arbeitsmappe wird in Excel geöffnet. Überprüfen Sie Folgendes:
Das ListObject wird mit Daten aufgefüllt.
Der Wert in der Spalte ListPrice in der ersten Zeile des ListObject ist 1431.5. Später in dieser exemplarischen Vorgehensweise verwenden Sie eine Konsolenanwendung, um die Werte in der Spalte ListPrice zu ändern.
Speichern Sie die Arbeitsmappe. Ändern Sie den Dateinamen oder den Speicherort der Arbeitsmappe nicht.
Beenden Sie Excel.
Erstellen eines Konsolenanwendungsprojekts
Erstellen Sie ein Konsolenanwendungsprojekt, das verwendet werden soll, um Daten im zwischengespeicherten Dataset in der Arbeitsmappe zu ändern.
So erstellen Sie das Konsolenanwendungsprojekt
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf AdventureWorksDataSet, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Neues Projekt.
Erweitern Sie im Bereich Projekttypen den Knoten Visual C# oder Visual Basic, und klicken Sie dann auf Windows.
Wählen Sie im Bereich Vorlagen die Option Konsolenanwendung aus.
Geben Sie im Feld Name die Zeichenfolge DataReader ein. Ändern Sie den Speicherort nicht.
Klicken Sie auf OK.
Visual Studio fügt das Projekt DataReader dem Projektmappen-Explorer hinzu und öffnet die Codedatei Program.cs bzw. Module1.vb.
Abrufen von Daten mit der Konsolenanwendung aus dem zwischengespeicherten Dataset
Verwenden Sie die ServerDocument-Klasse in der Konsolenanwendung, um die Daten in ein lokales AdventureWorksLTDataSet-Objekt einzulesen. Zur Bestätigung, dass das lokale Dataset mit Daten aus dem zwischengespeicherten Dataset initialisiert wurde, zeigt die Anwendung die Anzahl der Zeilen im lokalen Dataset an.
So rufen Sie Daten vom zwischengespeicherten Dataset ab
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt DataReader, und klicken Sie dann auf Verweis hinzufügen.
Wählen Sie auf der Registerkarte .NET Microsoft.VisualStudio.Tools.Applications.ServerDocument (wenn das Projekt DataReader auf .NET Framework 4 abzielt) oder Microsoft.VisualStudio.Tools.Applications.ServerDocument.v10.0 aus (wenn das Projekt DataReader auf .NET Framework 3.5 abzielt).
Klicken Sie auf OK.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt DataReader, und klicken Sie dann auf Verweis hinzufügen.
Wählen Sie auf der Registerkarte Projekte die Option AdventureWorksDataSet, und klicken Sie auf OK.
Öffnen Sie die Datei Program.cs oder die Datei Module1.vb im Code-Editor.
Fügen Sie die folgende using-Anweisung (für C#) bzw. die Imports-Anweisung (für Visual Basic) am Anfang der Codedatei hinzu.
Imports Microsoft.VisualStudio.Tools.Applications
using Microsoft.VisualStudio.Tools.Applications;
Fügen Sie der Main-Methode folgenden Code hinzu: Mit diesem Code werden die folgenden Objekte deklariert:
Eine Instanz des AdventureWorksLTDataSet-Typs, der im AdventureWorksDataSet-Projekt definiert ist.
Der Pfad zur AdventureWorksReport-Arbeitsmappe im build-Ordner des AdventureWorksReport-Projekts.
Ein ServerDocument-Objekt für den Zugriff auf den Datencache der Arbeitsmappe.
Tipp
Im folgenden Code wird davon ausgegangen, dass die Arbeitsmappe mit der Erweiterung XLSX gespeichert wird. Wenn die Arbeitsmappe im Projekt eine andere Erweiterung hat, ändern Sie den Pfad wie erforderlich.
Dim productDataSet As New AdventureWorksDataSet.AdventureWorksLTDataSet() Dim workbookPath As String = System.Environment.GetFolderPath( _ Environment.SpecialFolder.MyDocuments) & _ "\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx" Dim serverDocument1 As ServerDocument = Nothing
AdventureWorksDataSet.AdventureWorksLTDataSet productDataSet = new AdventureWorksDataSet.AdventureWorksLTDataSet(); string workbookPath = System.Environment.GetFolderPath( Environment.SpecialFolder.MyDocuments) + @"\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx"; ServerDocument serverDocument1 = null;
Fügen Sie der Main-Methode den folgenden Code nach dem im vorherigen Schritt hinzugefügten Code hinzu. Mit diesem Code werden die folgenden Aufgaben ausgeführt:
Er verwendet die CachedData-Eigenschaft der ServerDocument-Klasse, um auf das zwischengespeicherte Dataset in der Arbeitsmappe zuzugreifen.
Er liest die Daten aus dem zwischengespeicherten Dataset in das lokale Dataset ein.
Er zeigt die Anzahl von Zeilen im lokalen Dataset an, um zu bestätigen, dass Daten in dem Dataset enthalten sind.
Try serverDocument1 = New ServerDocument(workbookPath) Dim dataHostItem1 As CachedDataHostItem = _ serverDocument1.CachedData.HostItems("AdventureWorksReport.Sheet1") Dim dataItem1 As CachedDataItem = dataHostItem1.CachedData("AdventureWorksLTDataSet") If dataItem1 IsNot Nothing Then Console.WriteLine("Before reading data from the cache dataset, the local dataset has " & _ "{0} rows.", productDataSet.Product.Rows.Count.ToString()) ' Read the cached data from the worksheet dataset into the local dataset. Dim schemaReader As New System.IO.StringReader(dataItem1.Schema) Dim xmlReader As New System.IO.StringReader(dataItem1.Xml) productDataSet.ReadXmlSchema(schemaReader) productDataSet.ReadXml(xmlReader) Console.WriteLine("After reading data from the cache dataset, the local dataset has " & _ "{0} rows.", productDataSet.Product.Rows.Count.ToString()) Else Console.WriteLine("The data object is not found in the data cache.") End If Catch ex As System.IO.FileNotFoundException Console.WriteLine("The specified workbook does not exist.") Catch ex As System.Xml.XmlException Console.WriteLine("The data object has invalid XML information.") Finally If Not (serverDocument1 Is Nothing) Then serverDocument1.Close() End If Console.WriteLine(vbLf & vbLf & "Press Enter to close the application.") Console.ReadLine() End Try
try { serverDocument1 = new ServerDocument(workbookPath); CachedDataHostItem dataHostItem1 = serverDocument1.CachedData.HostItems["AdventureWorksReport.Sheet1"]; CachedDataItem dataItem1 = dataHostItem1.CachedData["adventureWorksLTDataSet"]; if (dataItem1 != null) { Console.WriteLine("Before reading data from the cache dataset, the local dataset has " + "{0} rows.", productDataSet.Product.Rows.Count.ToString()); // Read the cached data from the worksheet dataset into the local dataset. System.IO.StringReader schemaReader = new System.IO.StringReader(dataItem1.Schema); System.IO.StringReader xmlReader = new System.IO.StringReader(dataItem1.Xml); productDataSet.ReadXmlSchema(schemaReader); productDataSet.ReadXml(xmlReader); Console.WriteLine("After reading data from the cache dataset, the local dataset has " + "{0} rows.", productDataSet.Product.Rows.Count.ToString()); } else { Console.WriteLine("The data object is not found in the data cache."); } } catch (System.IO.FileNotFoundException) { Console.WriteLine("The specified workbook does not exist."); } catch (System.Xml.XmlException) { Console.WriteLine("The data object has invalid XML information."); } finally { if (serverDocument1 != null) { serverDocument1.Close(); } Console.WriteLine("\n\nPress Enter to close the application."); Console.ReadLine(); }
Klicken Sie im Menü Erstellen auf DataReader erstellen.
Testen des Projekts
Wenn Sie die Konsolenanwendung ausführen, wird die Anzahl der Zeilen im lokalen Dataset angezeigt.
So testen Sie die Arbeitsmappe
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt DataReader, zeigen Sie auf Debuggen, und klicken Sie dann auf Neue Instanz starten.
Vergewissern Sie sich, dass die Anwendung meldet, dass das lokale Dataset 295 Zeilen hat.
Drücken Sie die Eingabetaste, um die Anwendung zu schließen.
Nächste Schritte
Mehr über das Arbeiten mit zwischengespeicherten Daten erfahren Sie in den folgenden Themen:
Initialisieren der Daten in einem zwischengespeicherten Dataset ohne Starten von Excel. Weitere Informationen hierzu finden Sie unter Exemplarische Vorgehensweise: Einfügen von Daten in eine Arbeitsmappe auf einem Server.
Ändern der Daten in einem zwischengespeicherten Dataset ohne Starten von Excel. Weitere Informationen hierzu finden Sie unter Exemplarische Vorgehensweise: Ändern zwischengespeicherter Daten in einer Arbeitsmappe auf einem Server.
Siehe auch
Aufgaben
Gewusst wie: Abrufen von zwischengespeicherten Daten aus einer Arbeitsmappe auf einem Server
Gewusst wie: Einfügen von Daten in eine Arbeitsmappe auf einem Server
Exemplarische Vorgehensweise: Einfügen von Daten in eine Arbeitsmappe auf einem Server
Konzepte
Herstellen einer Verbindung mit Daten in Windows Forms-Anwendungen