Share via


Zugreifen auf Daten in Dokumenten auf dem Server

Sie können die Daten in einer Anpassung auf Dokumentebene programmieren, ohne das Objektmodell von Microsoft Office Word oder Microsoft Office Excel verwenden zu müssen. Dies bedeutet, dass Sie auf Daten zugreifen können, die in einem Dokument auf einem Server enthalten sind, auf dem Word oder Excel nicht installiert ist. Beispielsweise kann Code auf einem Server (z. B. auf einer ASP.NET Seite) die Daten in einem Dokument anpassen und das angepasste Dokument an einen Endbenutzer senden. Wenn der Endbenutzer das Dokument öffnet, bindet der Datenbindungscode in der Lösungsassembly die angepassten Daten an das Dokument. Dies ist möglich, da die Daten im Dokument von der Benutzeroberfläche getrennt sind. Weitere Informationen finden Sie unter Zwischengespeicherte Daten in Anpassungen auf Dokumentebene.

Gilt für: Die Informationen in diesem Thema gelten für Projekte auf Dokumentebene für Excel und Word. Weitere Informationen finden Sie unter features available by Office-App lication and project type.

Zwischenspeichern von Daten für die Verwendung auf einem Server

Um ein Datenobjekt in einem Dokument zwischenzuspeichern, markieren Sie es zur Entwurfszeit mit dem CachedAttribute Attribut, oder verwenden Sie die StartCaching Methode eines Hostelements zur Laufzeit. Wenn Sie ein Datenobjekt in einem Dokument zwischenspeichern, serialisiert die Visual Studio-Tools für Office-Laufzeit das Objekt in eine XML-Zeichenfolge, die im Dokument gespeichert ist. Objekte müssen bestimmte Anforderungen erfüllen, um für die Zwischenspeicherung berechtigt zu sein. Weitere Informationen finden Sie unter Cachedaten.

Serverseitiger Code kann alle Datenobjekte im Datencache bearbeiten. Steuerelemente, die an zwischengespeicherte Dateninstanzen gebunden sind, werden mit der Benutzeroberfläche synchronisiert, sodass alle serverseitigen Änderungen, die an den Daten vorgenommen werden, automatisch angezeigt werden, wenn das Dokument auf dem Client geöffnet wird.

Zugreifen auf Daten im Cache

Sie können auf Daten im Cache von Anwendungen außerhalb von Office zugreifen, z. B. aus einer Konsolenanwendung, einer Windows Forms-Anwendung oder einer Webseite. Die Anwendung, die auf die zwischengespeicherten Daten zugreift, muss voll vertrauenswürdig sein; Eine Webanwendung, die teilweise vertrauenswürdig ist, kann keine Daten einfügen, abrufen oder ändern, die in einem Office-Dokument zwischengespeichert werden.

Auf den Datencache kann über eine Hierarchie von Sammlungen zugegriffen werden, die von der CachedData Eigenschaft der ServerDocument Klasse verfügbar gemacht werden:

  • Die CachedData Eigenschaft gibt eine CachedData, die alle zwischengespeicherten Daten in einer Anpassung auf Dokumentebene enthält.

  • Jede CachedData enthält ein oder CachedDataHostItem mehrere Objekte. A CachedDataHostItem enthält alle zwischengespeicherten Datenobjekte, die in einer einzelnen Klasse definiert sind.

  • Jede CachedDataHostItem enthält ein oder CachedDataItem mehrere Objekte. A CachedDataItem stellt ein einzelnes zwischengespeichertes Datenobjekt dar.

    Im folgenden Codebeispiel wird veranschaulicht, wie auf eine zwischengespeicherte Zeichenfolge in der Sheet1 Klasse eines Excel-Arbeitsmappenprojekts zugegriffen wird. Dieses Beispiel ist Teil eines größeren Beispiels, das für die Save Methode bereitgestellt wird.

    serverDocument1 = new ServerDocument(documentPath);
    CachedDataHostItem hostItem1 = 
        serverDocument1.CachedData.HostItems["ExcelWorkbook1.Sheet1"];
    CachedDataItem dataItem1 = hostItem1.CachedData["CachedString"];
    

Ändern von Daten im Cache

Zum Ändern eines zwischengespeicherten Datenobjekts führen Sie in der Regel die folgenden Schritte aus:

  1. Deserialisieren Sie die XML-Darstellung des zwischengespeicherten Objekts in eine neue Instanz des Objekts. Sie können auf den XML-Code zugreifen, indem Sie die Xml Eigenschaft des CachedDataItem zwischengespeicherten Datenobjekts verwenden.

  2. Nehmen Sie die Änderungen an dieser Kopie vor.

  3. Serialisieren Sie das geänderte Objekt mithilfe einer der folgenden Optionen wieder in den Datencache:

    • Wenn Sie die Änderungen automatisch serialisieren möchten, verwenden Sie die SerializeDataInstance Methode. Diese Methode verwendet das DiffGram-Format für die Serialisierung DataSetDataTableund typisierte Datasetobjekte im Datencache. Das DiffGram-Format stellt sicher, dass Änderungen am Datencache in einem Offlinedokument ordnungsgemäß an den Server gesendet werden.

    • Wenn Sie eine eigene Serialisierung für Änderungen an zwischengespeicherten Daten durchführen möchten, können Sie direkt in die Xml Eigenschaft schreiben. Geben Sie das DiffGram-Format an, wenn Sie eine DataAdapter Datenbank mit Änderungen aktualisieren, die an Daten in einem DataSet, DataTableoder typisierten Dataset vorgenommen wurden. Andernfalls wird die DataAdapter Datenbank aktualisiert, indem neue Zeilen hinzugefügt werden, anstatt vorhandene Zeilen zu ändern.

Ändern von Daten ohne Deserialisierung des aktuellen Werts

In einigen Fällen sollten Sie den Wert des zwischengespeicherten Objekts ändern, ohne zuerst den aktuellen Wert deserialisierens zu müssen. Sie können dies beispielsweise tun, wenn Sie den Wert eines Objekts ändern, das einen einfachen Typ aufweist, z. B. eine Zeichenfolge oder eine ganze Zahl, oder wenn Sie ein zwischengespeichertes DataSet Dokument auf einem Server initialisieren. In diesen Fällen können Sie die SerializeDataInstance Methode verwenden, ohne zuerst den aktuellen Wert des zwischengespeicherten Objekts zu deserialisieren.

Im folgenden Codebeispiel wird veranschaulicht, wie der Wert einer zwischengespeicherten Zeichenfolge in der Sheet1 Klasse eines Excel-Arbeitsmappenprojekts geändert wird. Dieses Beispiel ist Teil eines größeren Beispiels, das für die Save Methode bereitgestellt wird.

serverDocument1 = new ServerDocument(documentPath);
CachedDataHostItem hostItem1 = 
    serverDocument1.CachedData.HostItems["ExcelWorkbook1.Sheet1"];
CachedDataItem dataItem1 = hostItem1.CachedData["CachedString"];

if (dataItem1 != null &&
    Type.GetType(dataItem1.DataType) == typeof(string))
{
    dataItem1.SerializeDataInstance("This is the new cached string value.");
    serverDocument1.Save();
}

Ändern von NULL-Werten im Datencache

Der Datencache speichert keine Objekte mit dem Wert NULL , wenn das Dokument gespeichert und geschlossen wird. Diese Einschränkung hat mehrere Folgen, wenn Sie zwischengespeicherte Daten ändern:

  • Wenn Sie ein Objekt im Datencache auf den Wert NULL festlegen, werden alle Objekte im Datencache beim Öffnen des Dokuments automatisch auf NULL festgelegt, und der gesamte Datencache wird gelöscht, wenn das Dokument gespeichert und geschlossen wird. Das heißt, alle zwischengespeicherten Objekte werden aus dem Datencache entfernt, und die CachedData Auflistung ist leer.

  • Wenn Sie eine Lösung mit NULL-Objekten im Datencache erstellen und diese Objekte mithilfe der ServerDocument Klasse initialisieren möchten, bevor das Dokument zum ersten Mal geöffnet wird, müssen Sie sicherstellen, dass Sie alle Objekte im Datencache initialisieren. Wenn Sie nur einige der Objekte initialisieren, werden alle Objekte beim Öffnen des Dokuments auf NULL festgelegt, und der gesamte Datencache wird gelöscht, wenn das Dokument gespeichert und geschlossen wird.

Zugreifen auf typisierte Datasets im Cache

Wenn Sie auf die Daten in einem typisierten Dataset sowohl aus einer Office-Lösung als auch aus einer Anwendung außerhalb von Office zugreifen möchten, z. B. eine Windows Forms-Anwendung oder ein ASP.NET-Projekt, müssen Sie das typisierte Dataset in einer separaten Assembly definieren, auf die in beiden Projekten verwiesen wird. Wenn Sie das typisierte Dataset zu jedem Projekt mithilfe des Assistenten für die Datenquellenkonfiguration oder des Dataset-Designers hinzufügen, behandelt .NET Framework die typisierten Datasets in den beiden Projekten als unterschiedliche Typen. Weitere Informationen zum Erstellen von typisierten Datasets finden Sie unter Erstellen und Konfigurieren von Datasets in Visual Studio.