É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
- 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.
- 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
- 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()
- 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()
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.
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.
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
- 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)
- 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: " & rangeResult1.Length)
Console.WriteLine("Value in range is: " & (CType(rangeResult1(5), Object()))(2))
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)
- 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: " & rangeResult1.Length)
Console.WriteLine("Value in range is: " & (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
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