Compartir a través de


Paso 3: acceso al servicio web

Última modificación: jueves, 21 de enero de 2010

Hace referencia a: SharePoint Server 2010

Después de agregar una referencia a Servicios web de Excel al proyecto, el siguiente paso consiste en crear una instancia de clase de proxy del servicio web. A continuación, se puede obtener acceso a los métodos del servicio web mediante una llamada a los métodos de la clase de proxy. Cuando la aplicación llama a estos métodos, el código de clase de proxy generado por Visual Studio controla las comunicaciones entre la aplicación y el servicio web.

Primero se crea una instancia de la clase de proxy del servicio web, ExcelWebService. A continuación, se pueden llamar varios métodos y propiedades del servicio web mediante la clase de proxy.

Las llamadas para abrir un libro se usan para obtener un identificador de sesión, pasar las credenciales predeterminadas, definir el objeto de coordenadas del rango, obtener el rango que usa el objeto de coordenadas de rango, cerrar el libro y detectar las excepciones SOAP.

Obtener acceso al servicio web

Para agregar directivas

  1. Cuando antes agregó la referencia web, creó un objeto llamado ExcelService en un espacio de nombres denominado <proyecto>.<nombreDeReferenciaWeb>. En este ejemplo, el objeto se denomina SampleApplication.ExcelWebService. En este tutorial también se muestra cómo detectar excepciones SOAP. Para ello, se usa el objeto System.Web.Services.Protocols. El espacio de nombres System.Web.Services.Protocols consta de las clases que definen los protocolos que se usan para transmitir datos a través del cable durante la comunicación entre los clientes del servicio web XML y los servicios web XML creados mediante ASP.NET.
    Para facilitar el uso de estos objetos, primero debe agregar los espacios de nombres como directivas al archivo Class1.cs. De este modo, si usa estas directivas, no tendrá que introducir los tipos completos en el espacio de nombres.

  2. Para agregar estas directivas, agregue el siguiente código al principio del código del archivo Class1.cs, después de using System:

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

Para llamar al servicio web

  1. Cree instancias e inicialice el objeto proxy del servicio web mediante la adición del siguiente código después del corchete de apertura en static void Main(string[] args):

    ExcelService es = new ExcelService();
    
    Dim es As New ExcelService()
    
  2. Agregue el siguiente código para crear una matriz de estado y objetos de coordenadas de rango:

    Status[] outStatus;
    RangeCoordinates rangeCoordinates = new RangeCoordinates();
    
    Dim outStatus() As Status
    Dim rangeCoordinates As New RangeCoordinates()
    
  3. Agregue el código para que señale a la hoja de cálculo a la que desea tener acceso. En este ejemplo, la hoja de cálculo se llama a "Sheet1". Agregue lo siguiente al código:

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

    Nota

    Asegúrese de que el libro que desea abrir tiene una hoja de cálculo denominada "Sheet1" que contiene los valores. Si lo prefiere, puede cambiar "Sheet1" en el código por el nombre de la hoja de cálculo.

  4. Agregue el siguiente código para señalar el libro que desea abrir:

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

    Cambie la ruta de acceso al libro para que coincida con la ubicación del libro que usa para este tutorial. Asegúrese de que el libro existe y de que la ubicación donde se guarda el libro es de confianza. Si usa una dirección URL HTTP para señalar la ubicación de un libro, podrá tener acceso a él de forma remota.

    Nota

    Para obtener la ruta de acceso a un libro de Microsoft SharePoint Server 2010, haga clic con el botón secundario en el libro y seleccione Copiar acceso directo. También puede seleccionar Propiedades y copiar la ruta al libro de trabajo desde esta ubicación.

  5. Agregue el siguiente código para establecer las credenciales para la solicitud.

    Nota

    Tendrá que establecer explícitamente las credenciales incluso si se van a usar las credenciales predeterminadas.

    es.Credentials = System.Net.CredentialCache.DefaultCredentials;
    
    es.Credentials = System.Net.CredentialCache.DefaultCredentials
    
  6. Agregue el siguiente código para abrir el libro y señalar a la ubicación de confianza donde se encuentra el libro. Coloque el código en un bloque 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)
    
  7. Agregue el siguiente código para preparar un objeto para que defina las coordenadas de intervalo y llame al método GetRange. El código también imprimirá el número total de filas del rango y el valor de un intervalo determinado.

    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))
    
  8. Agregue código para cerrar el libro y cierre la sesión actual. Agregue también un corchete de cierre para terminar el bloque try.

    Nota importanteImportante

    Se recomienda cerrar el libro si ha terminado con la sesión. Esto cerrará la sesión y liberará recursos.

    es.CloseWorkbook(sessionId);
    }
    
    es.CloseWorkbook(sessionId)
    
  9. Agregue un bloque catch para detectar la excepción SOAP e imprimir el mensaje de excepción:

    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
    

Código completo

El ejemplo de código siguiente es el código completo del archivo de ejemplo Class1.cs que se describe en los procedimientos anteriores.

Nota importanteImportante

Modifique la ruta de acceso del libro, el nombre de la hoja y así sucesivamente, según corresponda.

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

Vea también

Tareas

Paso 1: Crear el proyecto cliente del servicio web

Paso 2: Agregar una referencia web

Paso 4: Crear y probar la aplicación

Tutorial: Desarrollar una aplicación personalizada mediante Excel Web Services

Conceptos

Obtener acceso a la API de SOAP

Otros recursos

Procedimiento para confiar en ubicaciones de libro mediante secuencia de comandos