Étape 3 : accès au service web

Une fois une référence à Excel Web Services ajoutée dans votre projet, l'étape suivante consiste à créer une instance de la classe proxy du service Web. Vous pouvez alors accéder aux méthodes du service Web en appelant les méthodes de la classe proxy. Lorsque votre application appelle ces méthodes, le code de la classe proxy généré par Visual Studio gère les communications entre votre application et le service Web.

Vous devez d'abord créer une instance de la classe proxy du service Web, ExcelWebService. Vous devez ensuite appeler plusieurs méthodes et propriétés du service Web utilisant la classe proxy. Les appels servent à ouvrir un classeur, récupérer l'ID de session, transmettre les informations d'identification par défaut, définir l'objet de coordonnées de plage, récupérer la plage utilisant l'objet de coordonnées de plage, fermer le classeur et intercepter les exceptions SOAP.

Accès au service Web

Pour ajouter des directives

  1. Lorsque vous avez ajouté la référence web précédemment, elle a créé un objet nommé ExcelService dans un espace de noms appelé <yourProject>.< webReferenceName>. Dans cet exemple, l’objet est nommé SampleApplication.ExcelWebService. Cette procédure pas à pas montre également comment intercepter les exceptions SOAP. Pour ce faire, vous utilisez l’objet System.Web.Services.Protocols . L’espace de noms System.Web.Services.Protocols se compose des classes qui définissent les protocoles utilisés pour transmettre des données sur le réseau pendant la communication entre les clients du service Web XML et les services Web XML créés à l’aide de ASP.NET.

Pour faciliter l'utilisation de ces objets, vous devez d'abord ajouter les espaces de noms en tant que directives au fichier Class1.cs. Ainsi, vous n'aurez pas à qualifier complètement les types dans l'espace de noms.

  1. Pour ajouter ces directives, ajoutez le code suivant au début de votre code dans le fichier Class1.cs, après using System:
  
using SampleApplication.ExcelWebService;
using System.Web.Services.Protocols;
  
Imports SampleApplication.ExcelWebService
Imports System.Web.Services.Protocols

Pour appeler le service web

  1. Instanciez et initialisez l’objet proxy de service Web en ajoutant le code suivant après le crochet ouvrant dans static void Main(string[] args):
  
ExcelService es = new ExcelService();
  Dim es As New ExcelService()
  1. Ajoutez le code suivant pour créer un tableau d'états et des objets de coordonnées de plage :
  Status[] outStatus;
RangeCoordinates rangeCoordinates = new RangeCoordinates();
  
Dim outStatus() As Status
Dim rangeCoordinates As New RangeCoordinates()
  1. Ajoutez le code permettant de pointer vers la feuille de calcul à laquelle vous souhaitez accéder. Dans cet exemple, le feuille de calcul est appelée « Sheet1 ». Ajoutez les éléments suivants au code :

    
    string sheetName = "Sheet1";
    
    Dim sheetName As String = "Sheet1"
    

    Remarque

    Vérifiez que le classeur que vous souhaitez ouvrir comporte une feuille de calcul « Sheet1 » avec des valeurs. Vous pouvez également remplacer « Sheet1 » dans le code par le nom de votre feuille de calcul.

  2. Ajoutez le code suivant pour pointer sur le classeur que vous voulez ouvrir :

    string targetWorkbookPath = "http://myserver02/example/Shared%20Documents/Book1.xlsx";
    
    Dim targetWorkbookPath As String = "http://myserver02/example/Shared%20Documents/Book1.xlsx"
    

    Importante

    Remplacez le chemin d'accès au classeur par celui du classeur utilisé dans cette procédure pas à pas. Vérifiez que le classeur existe et que son emplacement d'enregistrement est approuvé. Si vous utilisez une URL HTTP qui pointe vers l'emplacement du classeur, vous pouvez y avoir accès à distance.

    Remarque

    [!REMARQUE] Vous pouvez récupérer le chemin d'accès à un classeur dans Microsoft SharePoint Server 2010 en cliquant avec le bouton droit sur un classeur et en sélectionnant Copier le raccourci. Vous pouvez également sélectionner l'option Propriétés et copier le chemin d'accès au classeur à partir de cet emplacement.

  3. Ajoutez le code ci-après pour définir les informations d'identification en vue de la demande de connexion.

    Remarque

    Vous devez définir les informations d'identification de façon explicite même si vous envisagez d'utiliser les informations d'identification par défaut.

  es.Credentials = System.Net.CredentialCache.DefaultCredentials;
  es.Credentials = System.Net.CredentialCache.DefaultCredentials
  1. Ajoutez le code ci-après pour ouvrir le classeur et pointer vers l'emplacement autorisé où il figure. Placez le code dans un bloc try:
  try
{
string sessionId = es.OpenWorkbook(targetWorkbookPath, "en-US", 
    "en-US", out outStatus);
  
Try
Dim sessionId As String = es.OpenWorkbook(targetWorkbookPath, "en-US", "en-US", outStatus)
  1. Ajoutez le code ci-après pour préparer un objet qui définisse les coordonnées de plage, puis appelez la méthode GetRange. Le code imprime également le nombre total de lignes de la plage et la valeur d'une plage spécifique.
  
rangeCoordinates.Column = 3;
rangeCoordinates.Row = 9;
rangeCoordinates.Height = 18;
rangeCoordinates.Width = 12;

object[] rangeResult1 = es.GetRange(sessionId, sheetName,
    rangeCoordinates, false, out outStatus);
Console.WriteLine("Total rows in range: " + rangeResult1.Length);
Console.WriteLine("Value in range is: " + ((object[])rangeResult1[5])[2]);
  
rangeCoordinates.Column = 3
rangeCoordinates.Row = 9
rangeCoordinates.Height = 18
rangeCoordinates.Width = 12

Dim rangeResult1() As Object = es.GetRange(sessionId, sheetName, rangeCoordinates, False, outStatus)
Console.WriteLine("Total rows in range: " &amp; rangeResult1.Length)
Console.WriteLine("Value in range is: " &amp; (CType(rangeResult1(5), Object()))(2))
  1. Ajoutez du code pour fermer le classeur et la session en cours. Placez également un crochet fermant à la fin du bloc try.

    Important : Il est conseillé de fermer le classeur une fois la session terminée. Cela permet de fermer la session et de libérer des ressources.

  
es.CloseWorkbook(sessionId);
}
  
es.CloseWorkbook(sessionId)
  1. Ajoutez un bloc catch pour intercepter l'exception SOAP et imprimer le message de l'exception :
  catch (SoapException e)
{
    Console.WriteLine("SOAP Exception Message: {0}", e.Message);
}
  
Catch e As SoapException
    Console.WriteLine("SOAP Exception Message: {0}", e.Message)
End Try

Code complet

L'exemple de code ci-après contient le code complet de l'exemple de fichier Class1.cs décrit dans les procédures précédentes.

Important : Apportez des modifications nécessaires au chemin d’accès du classeur, au nom de la feuille de calcul, etc.


using System;
using SampleApplication.ExcelWebService;
using System.Web.Services.Protocols;

namespace SampleApplication
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {            
            // Instantiate the Web service and create a status array object and range coordinate object
            ExcelService es = new ExcelService();
            Status[] outStatus;
            RangeCoordinates rangeCoordinates = new RangeCoordinates();
            
string sheetName = "Sheet1";
            // Using workbookPath this way will allow 
            // you to call the workbook remotely.
            // TODO: change the workbook path to 
            // point to workbook in a trusted location
            // that you have access to 
            string targetWorkbookPath = "http://myserver02/example/Shared%20Documents/Book1.xlsx";
//you can also use .xlsb files, for example, //"http://myserver02/example/Shared%20Documents/Book1.xlsb";

            // Set credentials for requests
            es.Credentials = System.Net.CredentialCache.DefaultCredentials;
            //Console.WriteLine("Cred: {0}", es.Credentials);
            try
            {
                // Call open workbook, and point to the trusted   
                // location of the workbook to open.
                string sessionId = es.OpenWorkbook(targetWorkbookPath, "en-US", "en-US", out outStatus);
                // Console.WriteLine("sessionID : {0}", sessionId);

                // Prepare object to define range coordinates
                // and the GetRange method.
                rangeCoordinates.Column = 3;
                rangeCoordinates.Row = 9;
                rangeCoordinates.Height = 18;
                rangeCoordinates.Width = 12;

                object[] rangeResult1 = es.GetRange(sessionId, sheetName, rangeCoordinates, false, out outStatus);
                Console.WriteLine("Total Rows in Range: " + rangeResult1.Length);
                Console.WriteLine("Value in range is: " + ((object[])rangeResult1[5])[3]); 
        
                // Close workbook. This also closes session.
                es.CloseWorkbook(sessionId);
            }
            catch (SoapException e)
            {
                Console.WriteLine("SOAP Exception Message: {0}", e.Message);
            }
            // catch (Exception e)
//            {
//                Console.WriteLine("Exception Message: {0}", e.Message);
//            }
//            Console.ReadLine();
        }
    }
}
     

Imports System
Imports SampleApplication.ExcelWebService
Imports System.Web.Services.Protocols

Namespace SampleApplication
    Friend Class Class1
        <STAThread> _
        Shared Sub Main(ByVal args() As String)
            ' Instantiate the Web service and create a status array object and range coordinate object
            Dim es As New ExcelService()
            Dim outStatus() As Status
            Dim rangeCoordinates As New RangeCoordinates()

Dim sheetName As String = "Sheet1"
            ' Using workbookPath this way will allow 
            ' you to call the workbook remotely.
            ' TODO: change the workbook path to 
            ' point to workbook in a trusted location
            ' that you have access to 
            Dim targetWorkbookPath As String = "http://myserver02/example/Shared%20Documents/Book1.xlsx"
'you can also use .xlsb files, for example, //"http://myserver02/example/Shared%20Documents/Book1.xlsb";

            ' Set credentials for requests
            es.Credentials = System.Net.CredentialCache.DefaultCredentials
            'Console.WriteLine("Cred: {0}", es.Credentials);
            Try
                ' Call open workbook, and point to the trusted   
                ' location of the workbook to open.
                Dim sessionId As String = es.OpenWorkbook(targetWorkbookPath, "en-US", "en-US", outStatus)
                ' Console.WriteLine("sessionID : {0}", sessionId)

                ' Prepare object to define range coordinates
                ' and the GetRange method.
                rangeCoordinates.Column = 3
                rangeCoordinates.Row = 9
                rangeCoordinates.Height = 18
                rangeCoordinates.Width = 12

                Dim rangeResult1() As Object = es.GetRange(sessionId, sheetName, rangeCoordinates, False, outStatus)
                Console.WriteLine("Total Rows in Range: " &amp; rangeResult1.Length)
                Console.WriteLine("Value in range is: " &amp; (CType(rangeResult1(5), Object()))(3))

                ' Close workbook. This also closes session.
                es.CloseWorkbook(sessionId)
            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
            'Console.ReadLine()
        End Sub
    End Class
End Namespace

Voir aussi

Concepts

Accès à l'API SOAP

Autres ressources

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

Étape 2 : ajout d'une référence 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 les emplacements des classeurs à l'aide de scripts