Partager via


Procédure : obtenir un classeur entier ou une capture instantanée

Dernière modification : mercredi 24 mars 2010

S’applique à : SharePoint Server 2010

Cet exemple montre comment obtenir un classeur entier, une capture instantanée du fichier entier ou simplement une capture instantanée des feuilles ou objets du fichier pouvant être affichés, à l'aide des Excel Web Services. L'obtention du classeur ou d'une capture instantanée est utile si vous voulez enregistrer une copie du classeur actualisé, l'enregistrer à l'emplacement de votre choix, l'envoyer à une personne, etc.

Une capture instantanée est un classeur généré par les Excel Calculation Services, elle représente l'état actuel du classeur dans la session des Excel Services. Certaines captures instantanées (également appelées « captures instantanées d'éléments publiés ») contiennent uniquement les parties du fichier Excel qu'un créateur définit comme pouvant être affichées lors de l'enregistrement du fichier sur le serveur. Les captures instantanées contiennent la mise en page et les formats du fichier d'origine, ainsi que les valeurs actualisées calculées par les Excel Calculation Services ; toutefois, elles ne contiennent pas de formules Excel ni de connexions de données externes. Les Excel Services ouvrent le fichier Excel sur le serveur, actualisent les sources de données et calculent l'ensemble des formules Excel. Lorsqu'un utilisateur ou une application demande une capture instantanée, les Excel Services génèrent et renvoient une capture instantanée via l'API du service Web.

Vous pouvez acquérir une capture instantanée d'un classeur que vous avez déjà enregistré sur le serveur, même si vous ne disposez pas des droits appropriés pour accéder au fichier réel sur le serveur.

À l'aide de la méthode GetWorkbook du service Web, vous pouvez obtenir l'intégralité du classeur ou l'un des types de captures instantanées. Par exemple, le code suivant renvoie une capture instantanée de l'intégralité du classeur Excel. Il utilise l'énumération WorkbookType.FullSnapshot en tant que second argument de la méthode GetWorkbook.

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

La méthode GetWorkbook renvoie un tableau d'octets dans le même format de fichier Excel que celui chargé dans la session.

Pour obtenir une capture instantanée des éléments que le créateur du classeur Excel a défini comme pouvant être affichés lors de l'enregistrement du classeur Excel vers le serveur, utilisez l'énumération WorkbookType.PublishedItemsSnapshot comme indiqué ici :

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

Pour obtenir une capture instantanée de l'intégralité du classeur dans l'état de sa session active, utilisez l'énumération WorkbookType.FullWorkbook :

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

L'option WorkbookType.FullWorkbook ne fonctionne que si l'utilisateur dispose de droits d'ouverture sur le fichier ; si l'utilisateur dispose de droits d'affichage uniquement, l'appel échoue.

Dans certains cas, votre code doit enregistrer le résultat d'un appel de GetWorkbook . Pour plus d'informations sur l'enregistrement d'un classeur, voir l'exemple Procédure : enregistrer un classeur.

Pour plus d'informations sur la méthode GetWorkbook et l'énumération WorkbookType voir la documentation de référence des Excel Web Services.

Exemple

Le programme suivant (une application console) reçoit un argument de ligne de commande, qui représente le chemin d'accès au classeur sur le serveur. Le programme appelle le service Web pour ouvrir le classeur sur le serveur, puis obtient une capture instantanée. Il l'écrit ensuite dans un format de sortie standard que vous pouvez rediriger vers un nouveau fichier de capture instantanée.

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

Utilisez la ligne de commande et les arguments suivants pour exécuter l'application GetSnapshot :

GetSnapshot.exe [workbook_path] > [snapshot_filename]

Par exemple :

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

Si vous utilisez le précédent exemple de ligne de commande, l'outil GetSnapshot place un nouveau fichier dans le répertoire « C:\ ».

Notes

Le classeur dont vous souhaitez obtenir une capture instantanée doit se trouver dans un emplacement fiable.

Programmation fiable

Veillez à ajouter une référence Web à un site des Excel Web Services auquel vous avez accès. Remplacez l'instruction using GetSnapshot.myServer02; de sorte qu'elle pointe vers le site de service Web auquel vous faites référence.

Voir aussi

Tâches

Étape 1 : création du projet de client de service Web

Étape 2 : ajout d'une référence Web

Étape 3: accès au service Web

Étape 4 : création et test de l'application

Procédure pas à pas : développement d'une application personnalisée à l'aide des services Web Excel

Procédure : Approuver un emplacement

Concepts

Accès à l'API SOAP