Freigeben über


Gewusst wie: Abrufen einer ganzen Arbeitsmappe oder einer Momentaufnahme

Letzte Änderung: Mittwoch, 24. März 2010

Gilt für: SharePoint Server 2010

In diesem Beispiel wird gezeigt, wie eine ganze Arbeitsmappe, eine Momentaufnahme der gesamten Datei oder lediglich eine Momentaufnahme der sichtbaren Blätter oder Objekte in der Datei mithilfe der Excel-Webdienste abgerufen werden kann. Das Abrufen der Arbeitsmappe oder einer Momentaufnahme ist hilfreich, wenn Sie eine Kopie der aktuellen Arbeitsmappe speichern, sie an einem bestimmten Ort aufbewahren, einer anderen Person zusenden oder sie anderweitig verwenden möchten.

Eine Momentaufnahme ist eine durch die Dienste für Excel-Berechnungen generierte Arbeitsmappe und stellt den aktuellen Status der Arbeitsmappe in der Excel Services-Sitzung dar. Einige Momentaufnahmen ("Momentaufnahmen veröffentlichter Elemente" genannt) enthalten nur die Teile der Excel-Datei, die der Autor beim Speichern der Datei auf dem Server als sichtbar ausgewählt hat. Momentaufnahmen enthalten das Layout und die Formate der Originaldatei sowie aktuelle Werte, die durch die Dienste für Excel-Berechnungen berechnet werden; sie enthalten jedoch keine Excel-Formeln oder externe Datenverbindungen. Excel Services öffnet die Excel-Datei auf dem Server, aktualisieren Datenquellen und berechnen alle Excel-Formeln. Wenn ein Benutzer oder eine Anwendung eine Momentaufnahme anfordert, wird eine Momentaufnahme durch Excel Services generiert und über die Webdienst-API zurückgesendet.

Sie können auch dann eine Momentaufnahme einer Arbeitsmappe erhalten, die Sie bereits auf dem Server gespeichert haben, wenn Sie nicht über die Rechte verfügen, um auf die eigentliche Datei auf dem Server zuzugreifen.

Verwenden Sie die GetWorkbook-Methode des Webdienstes, um entweder die ganze Arbeitsmappe oder einen der Momentaufnahmentypen abzurufen. Durch den folgenden Code wird beispielsweise eine Momentaufnahme der gesamten Excel-Arbeitsmappe zurückgegeben. In dem Beispiel wird die WorkbookType.FullSnapshot-Enumeration als zweites Argument in der GetWorkbook-Methode verwendet.

byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.FullSnapshot, out status);
Dim workbook() As Byte = xlService.GetWorkbook(sessionId, WorkbookType.FullSnapshot, status)

Die GetWorkbook-Methode gibt ein Bytearray in demselben Excel-Dateiformat zurück, das in der Sitzung geladen wurde.

Zum Abrufen einer Momentaufnahme der Elemente, die der Autor der Excel-Arbeitsmappe beim Speichern der Arbeitsmappe auf dem Server als sichtbar ausgewählt hat, verwenden Sie die WorkbookType.PublishedItemsSnapshot-Enumeration, wie im Folgenden gezeigt wird:

byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.PublishedItemsSnapshot, out status);
Dim workbook() As Byte = xlService.GetWorkbook(sessionId, WorkbookType.FullSnapshot, status)

Zum Abrufen der gesamten Arbeitsmappe im aktuellen Status verwenden Sie die WorkbookType.FullWorkbook-Enumeration:

byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.FullWorkbook, out status);
Dim workbook() As Byte = xlService.GetWorkbook(sessionId, WorkbookType.FullWorkbook, status)

Die Option WorkbookType.FullWorkbook ist nur funktionsfähig, wenn der Benutzer über die Rechte zum Öffnen der Datei verfügt. Wenn der Benutzer die Datei nur anzeigen darf, führt der Aufruf zu einem Fehler.

In einigen Fällen muss der Code das Ergebnis eines GetWorkbook -Aufrufs speichern. Erläuterungen zum Speichern einer Arbeitsmappe finden Sie im Beispiel How to: Save a Workbook.

Weitere Informationen zur GetWorkbook-Methode und zu WorkbookType finden Sie in der Referenzdokumentation für die Excel-Webdienste.

Beispiel

Das folgende Programm (eine Konsolenanwendung) empfängt ein Befehlszeilenargument, das den Pfad zur Arbeitsmappe auf dem Server angibt. Das Programm ruft den Webdienst auf, um die Arbeitsmappe auf dem Server zu öffnen und eine Momentaufnahme abzurufen. Anschließend erfolgt die Ergebnisausgabe in der Standardausgabe, sodass Sie sie in eine neue Momentaufnahmendatei umleiten können.

using System;
using System.IO;
using System.Text;
using System.Web.Services.Protocols;
// TODO: Change the using GetSnapshot.myServer02 statement 
// to point to the Web service you are referencing.
using GetSnapshot.myServer02;

namespace GetSnapshot
{
    class ExcelServicesSnapshot
    {
        static void Main(string[] args)
        {
            try
            {
                if (args.Length < 1)
                {
                    Console.Error.WriteLine("Command line arguments should be: GetSnapshot [workbook_path] > [snapshot_filename]");
                    return;
                }
                // Instantiate the Web service and 
                // create a status array object.
                ExcelService xlService = new ExcelService();
                Status[] status;
                
                xlService.Timeout = 600000;
                // Set credentials for requests.
                // Use the current user's logon credentials.
                xlService.Credentials =   
                    System.Net.CredentialCache.DefaultCredentials;
                 
                // Open the workbook, then call GetWorkbook 
                // and close the session.
                string sessionId = xlService.OpenWorkbook(args[0], "en-US", "en-US", out status);
                byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.PublishedItemsSnapshot, out status);
                // byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.FullWorkbook, out status);
                // byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.FullSnapshot, out status);

                // Close the workbook. This also closes the session.
                status = xlService.CloseWorkbook(sessionId);

                // Write the resulting Excel file to stdout 
                // as a binary stream.
                BinaryWriter binaryWriter = new BinaryWriter(Console.OpenStandardOutput());
                binaryWriter.Write(workbook);
                binaryWriter.Close();
            }

            catch (SoapException e)
            {
                Console.WriteLine("SOAP Exception Message: {0}", e.Message);
            }

            catch (Exception e)
            {
                Console.WriteLine("Exception Message: {0}", e.Message);
            }   
        } 
    }
}
Imports System
Imports System.IO
Imports System.Text
Imports System.Web.Services.Protocols
' TODO: Change the using GetSnapshot.myServer02 statement 
' to point to the Web service you are referencing.
Imports GetSnapshot.myServer02

Namespace GetSnapshot
    Friend Class ExcelServicesSnapshot
        Shared Sub Main(ByVal args() As String)
            Try
                If args.Length < 1 Then
                    Console.Error.WriteLine("Command line arguments should be: GetSnapshot [workbook_path] > [snapshot_filename]")
                    Return
                End If
                ' Instantiate the Web service and 
                ' create a status array object.
                Dim xlService As New ExcelService()
                Dim status() As Status

                xlService.Timeout = 600000
                ' Set credentials for requests.
                ' Use the current user's logon credentials.
                xlService.Credentials = System.Net.CredentialCache.DefaultCredentials

                ' Open the workbook, then call GetWorkbook 
                ' and close the session.
                Dim sessionId As String = xlService.OpenWorkbook(args(0), "en-US", "en-US", status)
                Dim workbook() As Byte = xlService.GetWorkbook(sessionId, WorkbookType.PublishedItemsSnapshot, status)
                ' byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.FullWorkbook, out status);
                ' byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.FullSnapshot, out status);

                ' Close the workbook. This also closes the session.
                status = xlService.CloseWorkbook(sessionId)

                ' Write the resulting Excel file to stdout 
                ' as a binary stream.
                Dim binaryWriter As New BinaryWriter(Console.OpenStandardOutput())
                binaryWriter.Write(workbook)
                binaryWriter.Close()

            Catch e As SoapException
                Console.WriteLine("SOAP Exception Message: {0}", e.Message)

            Catch e As Exception
                Console.WriteLine("Exception Message: {0}", e.Message)
            End Try
        End Sub
    End Class
End Namespace

Verwenden Sie die folgende Befehlszeile und die angegebenen Argumente, um die Anwendung GetSnapshot auszuführen:

GetSnapshot.exe [workbook_path] > [snapshot_filename]

Beispiel:

C:\>GetSnapshot.exe http://myServer02/reports/reports/OriginalWorkbook.xlsx > SnapshotCopy.xlsx

Wenn Sie das vorherige Befehlszeilenbeispiel verwenden, legt das Tool GetSnapshot eine neue Datei im Verzeichnis C:\ ab.

HinweisHinweis

Die Arbeitsmappe, von der Sie eine Momentaufnahme abrufen möchten, muss sich an einem vertrauenswürdigen Speicherort befinden.

Robuste Programmierung

Stellen Sie sicher, dass Sie einen Webverweis auf eine Excel-Webdienste-Website hinzufügen, auf die Sie zugreifen können. Ändern Sie die using GetSnapshot.myServer02; -Anweisung, sodass sie auf die Webdienstsite zeigt, auf die Sie verweisen.

Siehe auch

Aufgaben

Schritt 1: Erstellen des Webdienst-Clientprojekts

Schritt 2: Hinzufügen eines Webverweises

Schritt 3: Zugreifen auf den Webdienst

Schritt 4: Erstellen und Testen der Anwendung

Exemplarische Vorgehensweise: Entwickeln einer benutzerdefinierten Anwendung mithilfe der Excel-Webdienste

Gewusst wie: Festlegen eines Speicherorts als vertrauenswürdig

Konzepte

Zugreifen auf die SOAP-API