Partager via


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

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 Services Web Excel. 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 Services Excel. 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 Services Excel 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 Services Excel 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);

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);

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);

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 Services Web Excel.

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);
            }   
        } 
    }
}

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 Services Web Excel 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

Autres ressources

É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
Accès à l'API SOAP
Procédure : approuver un emplacement
Procédure : approuver les emplacements des classeurs à l'aide de scripts