Exemplarische Vorgehensweise: Einfügen von Daten in eine Arbeitsmappe auf einem Server
Diese exemplarische Vorgehensweise veranschaulicht, wie Sie mit der ServerDocument-Klasse Daten in ein Dataset im Cache einer Microsoft Office Excel-Arbeitsmappe einfügen können, ohne Excel zu starten. Diese exemplarische Vorgehensweise liefert schrittweise Anweisungen für das Verwenden des Codebeispiels, das in Gewusst wie: Einfügen von Daten in eine 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
Hinzufügen des Datasets in der Arbeitsmappe zum Datencache
Einfügen von Daten in das zwischengespeicherte Dataset durch Ausführen von Code 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 Exemplarische Vorgehensweise: Einfügen von Daten in eine Arbeitsmappe auf einem Server.
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.
Checkpoint
Erstellen Sie das Excel-Arbeitsmappenprojekt, und führen Sie es aus, um sicherzustellen, dass es fehlerfrei kompiliert und ausgeführt wird.
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. Das ListObject in Sheet1 ist leer, da das adventureWorksLTDataSet-Objekt im Datencache bisher keine Daten enthält. Im nächsten Abschnitt verwenden Sie eine Konsolenanwendung, um das adventureWorksLTDataSet-Objekt mit Daten aufzufüllen.
Beenden Sie Excel. Speichern Sie die Änderungen nicht.
Erstellen eines Konsolenanwendungsprojekts
Erstellen Sie ein Konsolenanwendungsprojekt, das verwendet werden soll, um Daten in das zwischengespeicherte Dataset in der Arbeitsmappe zu einzufügen.
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 DataWriter ein. Ändern Sie den Speicherort nicht.
Klicken Sie auf OK.
Visual Studio fügt das Projekt DataWriter dem Projektmappen-Explorer hinzu und öffnet die Codedatei Program.cs bzw. Module1.vb.
Hinzufügen von Daten mit der Konsolenanwendung zum zwischengespeicherten Dataset
Verwenden Sie die ServerDocument-Klasse in der Konsolenanwendung, um das zwischengespeicherte Dataset in der Arbeitsmappe mit Daten aufzufüllen.
So fügen Sie Daten zum zwischengespeicherten Dataset hinzu
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt DataWriter, und klicken Sie dann auf Verweis hinzufügen.
Wählen Sie auf der Registerkarte .NET Microsoft.VisualStudio.Tools.Applications.ServerDocument (wenn das Projekt DataWriter auf .NET Framework 4 abzielt) oder Microsoft.VisualStudio.Tools.Applications.ServerDocument.v10.0 aus (wenn das Projekt DataWriter auf .NET Framework 3.5 abzielt).
Klicken Sie auf OK.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt DataWriter, 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:
Instanzen vom AdventureWorksLTDataSet-Typ und Instanzen vom ProductTableAdapter-Typ, die im AdventureWorksDataSet-Projekt definiert sind.
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 Sie eine Arbeitsmappe mit der Erweiterung .xlsx verwenden. Wenn die Arbeitsmappe im Projekt eine andere Dateinamenerweiterung hat, ändern Sie den Pfad wie erforderlich.
Dim productDataSet As New AdventureWorksDataSet.AdventureWorksLTDataSet() Dim productTableAdapter As _ New AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter() 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(); AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter productTableAdapter = new AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter(); 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:
Das typisierte Datasetobjekt wird mit dem Tabellenadapter aufgefüllt.
Er verwendet die CachedData-Eigenschaft der ServerDocument-Klasse, um auf das zwischengespeicherte Dataset in der Arbeitsmappe zuzugreifen.
Er verwendet die SerializeDataInstance-Methode, um das zwischengespeicherte Dataset mit Daten aus dem lokalen typisierten Dataset aufzufüllen.
Try productTableAdapter.Fill(productDataSet.Product) Console.WriteLine("The local dataset is filled.") serverDocument1 = New ServerDocument(workbookPath) Dim dataHostItem1 As CachedDataHostItem = _ serverDocument1.CachedData.HostItems("AdventureWorksReport.Sheet1") Dim dataItem1 As CachedDataItem = dataHostItem1.CachedData("AdventureWorksLTDataSet") ' Initialize the worksheet dataset with the local dataset. If dataItem1 IsNot Nothing Then dataItem1.SerializeDataInstance(productDataSet) serverDocument1.Save() Console.WriteLine("The data is saved to the data cache.") Else Console.WriteLine("The data object is not found in the data cache.") End If Catch ex As System.Data.SqlClient.SqlException Console.WriteLine(ex.Message) Catch ex As System.IO.FileNotFoundException Console.WriteLine("The specified workbook does not exist.") 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 { productTableAdapter.Fill(productDataSet.Product); Console.WriteLine("The local dataset is filled."); serverDocument1 = new ServerDocument(workbookPath); CachedDataHostItem dataHostItem1 = serverDocument1.CachedData.HostItems["AdventureWorksReport.Sheet1"]; CachedDataItem dataItem1 = dataHostItem1.CachedData["adventureWorksLTDataSet"]; // Initialize the worksheet dataset with the local dataset. if (dataItem1 != null) { dataItem1.SerializeDataInstance(productDataSet); serverDocument1.Save(); Console.WriteLine("The data is saved to the data cache."); Console.ReadLine(); } else { Console.WriteLine("The data object is not found in the data cache."); } } catch (System.Data.SqlClient.SqlException ex) { Console.WriteLine(ex.Message); } catch (System.IO.FileNotFoundException) { Console.WriteLine("The specified workbook does not exist."); } finally { if (serverDocument1 != null) { serverDocument1.Close(); } Console.WriteLine("\n\nPress Enter to close the application."); Console.ReadLine(); }
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt DataWriter, zeigen Sie auf Debuggen, und klicken Sie dann auf Neue Instanz starten.
Das Projekt wird erstellt, und die Konsolenanwendung zeigt mehrere Statusmeldungen an, wenn das lokale Dataset aufgefüllt wird und wenn die Anwendung die Daten in das zwischengespeicherte Dataset im Workbook speichert. Drücken Sie die Eingabetaste, um die Anwendung zu schließen.
Testen der Arbeitsmappe
Wenn Sie die Arbeitsmappe öffnen, zeigt das ListObject nun Daten an, die mit der Konsolenanwendung dem zwischengespeicherten Dataset hinzugefügt wurden.
So testen Sie die Arbeitsmappe
Schließen Sie die AdventureWorksReport-Arbeitsmappe im Visual Studio-Designer, wenn sie immer noch geöffnet ist.
Öffnen Sie im Windows-Explorer die AdventureWorksReport-Arbeitsmappe, die im Buildordner des AdventureWorksReport-Projekts ist. Standardmäßig befindet sich der Buildordner an einem der folgenden Speicherorte:
%UserProfile%\Eigene Dateien\AdventureWorksReport\bin\Debug (Windows XP und früher)
%UserProfile%\Dokumente\AdventureWorksReport\bin\Debug (Windows Vista)
Überprüfen Sie, dass das ListObject mit Daten aufgefüllt ist, nachdem Sie die Arbeitsmappe geöffnet haben.
Nächste Schritte
Mehr über das Arbeiten mit zwischengespeicherten Daten erfahren Sie in den folgenden Themen:
Ä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.
Einfügen von Daten in den Datacache eines Word-Dokuments als Bytearray im Speicher statt auf einer Festplatte gespeichert. Weitere Informationen hierzu finden Sie unter Gewusst wie: Einfügen von Daten in Dokumente, ohne auf den Datenträger zu schreiben.
Siehe auch
Aufgaben
Gewusst wie: Einfügen von Daten in eine Arbeitsmappe auf einem Server
Gewusst wie: Einfügen von Daten in Dokumente, ohne auf den Datenträger zu schreiben
Konzepte
Herstellen einer Verbindung mit Daten in Windows Forms-Anwendungen