Gewusst wie: Abrufen von zwischengespeicherten Daten aus einer Arbeitsmappe auf einem Server
Sie können Daten aus dem Cache einer Microsoft Office Excel-Arbeitsmappe abrufen, die Teil eines Office-Projekts auf Dokumentebene ist, ohne Excel ausführen zu müssen. Dies ermöglicht es, Daten aus Excel-Arbeitsmappen zu erhalten, die auf einem Server gespeichert sind.
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.
Der Code zur Datenabfrage muss außerhalb der Office-Projektassembly liegen, die dem Dokument zugeordnet ist, mit dem Sie arbeiten. Infrage käme z. B. eine ASP.NET-Webseite, eine Konsolenanwendung oder eine Windows Forms-Anwendung.
Schritt-für-Schritt-Anweisungen zum Verwenden des Codebeispiels in diesem Thema finden Sie unter Exemplarische Vorgehensweise: Abrufen zwischengespeicherter Daten aus einer Arbeitsmappe auf einem Server.
Beispiel
Im folgenden Codebeispiel wird zuerst eine Instanz eines typisierten Datasets mit dem Namen AdventureWorksLTDataSet erstellt. Anschließend verwendet der Code die CachedData-Eigenschaft der ServerDocument-Klasse, um auf eine ausgefüllte Instanz desselben typisierten Datasets zuzugreifen, die bereits in einer Excel-Arbeitsmappe zwischengespeichert ist, und liest dann die Daten aus dem zwischengespeicherten Dataset in das lokale Dataset ein.
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
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
AdventureWorksDataSet.AdventureWorksLTDataSet productDataSet =
new AdventureWorksDataSet.AdventureWorksLTDataSet();
string workbookPath = System.Environment.GetFolderPath(
Environment.SpecialFolder.MyDocuments) +
@"\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx";
ServerDocument serverDocument1 = null;
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();
}
Kompilieren des Codes
Das Codebeispiel in diesem Thema ist für die Verwendung mit den folgenden Anwendungen gedacht:
Eine Konsolenanwendung mit Zugriff auf ein Klassenbibliotheksprojekt, das ein typisiertes Dataset definiert. Der Code wird in der Konsolenanwendung ausgeführt.
Eine Excel-Arbeitsmappe, die Teil einer Anpassung auf Dokumentebene für Excel ist. Die Arbeitsmappe verfügt über ein zwischengespeichertes DataSet mit dem Namen AdventureWorksLTDataSet, das Daten enthält.
Schritt-für-Schritt-Anweisungen zum Verwenden des Codes finden Sie unter Exemplarische Vorgehensweise: Abrufen zwischengespeicherter Daten aus einer Arbeitsmappe auf einem Server.
Siehe auch
Aufgaben
Gewusst wie: Zwischenspeichern von Daten zur Offlineverwendung oder zur Verwendung auf einem Server
Gewusst wie: Ändern zwischengespeicherter Daten in einer Arbeitsmappe auf einem Server