Étape 3: accès au service Web
Dernière modification : jeudi 21 janvier 2010
S’applique à : SharePoint Server 2010
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, celle-ci a créé un objet appelé ExcelService dans un espace de noms <votreProjet>.<NomReferenceweb>. Dans cet exemple, l’objet s’appelle SampleApplication.ExcelWebService. Cette procédure pas à pas montre également comment intercepter des exceptions SOAP à l’aide de l’objet System.Web.Services.Protocols. L’espace de noms System.Web.Services.Protocols est composé des classes qui définissent les protocoles utilisés pour transmettre les données via le câble pendant la communication entre les clients des services Web XML et les services Web XML créés à l’aide d’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, placez le code ci-après au début du code contenu 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 du 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"
Notes
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.
Add the following code to point to the workbook you want to open:
string targetWorkbookPath = "http://myserver02/example/Shared%20Documents/Book1.xlsx";
Dim targetWorkbookPath As String = "http://myserver02/example/Shared%20Documents/Book1.xlsx"
Important
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.
Notes
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.
Notes
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
Tâches
É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
Concepts
Autres ressources
Procédure : approuver les emplacements des classeurs à l'aide de scripts