Schritt 3: Zugreifen auf den WebdienstStep 3: Accessing the Web Service

Nachdem Sie Ihrem Projekt einen Verweis auf Excel Web Services hinzugefügt haben, erstellen Sie im nächsten Schritt eine Instanz der Proxyklasse des Webdiensts. Anschließend können Sie auf die Methoden des Webdiensts zugreifen, indem Sie die Methoden in der Proxyklasse aufrufen. Wenn diese Methoden von der Anwendung aufgerufen werden, verarbeitet der von Visual Studio generierte Code für die Proxyklasse die Kommunikation zwischen Anwendung und Webdienst.After you have added a reference to Excel Web Services to your project, the next step is to create an instance of the Web service's proxy class. You can then access the methods of the Web service by calling the methods in the proxy class. When your application calls these methods, the proxy class code generated by Visual Studio handles the communications between your application and the Web service.

First you create an instance of the Web service's proxy class, ExcelWebService. Next you call several of the Web service's methods and properties using the proxy class. You use the calls to open a workbook, get the session ID, pass in the default credentials, define the range coordinate object, get the range that uses the range coordinate object, close the workbook, and catch the SOAP exceptions.First you create an instance of the Web service's proxy class, ExcelWebService. Next you call several of the Web service's methods and properties using the proxy class. You use the calls to open a workbook, get the session ID, pass in the default credentials, define the range coordinate object, get the range that uses the range coordinate object, close the workbook, and catch the SOAP exceptions.

Zugreifen auf den WebdienstAccessing the Web Service

So fügen Sie Anweisungen hinzuTo add directives

  1. When you added the Web reference earlier, it created an object named ExcelService in a namespace called .. In this example, the object is named SampleApplication.ExcelWebService. This walkthrough also shows how to catch SOAP exceptions. To do so, you use the System.Web.Services.Protocols object. The System.Web.Services.Protocols namespace consists of the classes that define the protocols used to transmit data across the wire during the communication between XML Web service clients and XML Web services created using ASP.NET.When you added the Web reference earlier, it created an object named ExcelService in a namespace called .. In this example, the object is named SampleApplication.ExcelWebService. This walkthrough also shows how to catch SOAP exceptions. To do so, you use the System.Web.Services.Protocols object. The System.Web.Services.Protocols namespace consists of the classes that define the protocols used to transmit data across the wire during the communication between XML Web service clients and XML Web services created using ASP.NET.

To facilitate using these objects, you must first add the namespaces as directives to the Class1.cs file. This way, if you use these directives, you do not need to fully qualify the types in the namespace.To facilitate using these objects, you must first add the namespaces as directives to the Class1.cs file. This way, if you use these directives, you do not need to fully qualify the types in the namespace.

  1. Zum Hinzufügen dieser Anweisungen fügen Sie am Anfang des Codes in der Datei „Class1.cs“ nach using System: den folgenden Code hinzu:To add these directives, add the following code to the beginning of your code in the Class1.cs file, after using System:
  
using SampleApplication.ExcelWebService;
using System.Web.Services.Protocols;
  
Imports SampleApplication.ExcelWebService
Imports System.Web.Services.Protocols

So rufen Sie den Webdienst aufTo call the Web service

  1. Instanziieren und initialisieren Sie das Webdienst-Proxyobjekt, indem Sie nach der öffnenden Klammer in static void Main(string[] args) den folgenden Code einfügen:Instantiate and initialize the Web service proxy object by adding the following code after the opening bracket in static void Main(string[] args):
  
ExcelService es = new ExcelService();
  Dim es As New ExcelService()
  1. Fügen Sie folgenden Code hinzu, um ein Statusarray und Bereichskoordinatenobjekte zu erstellen:Add the following code to create a status array and range coordinate objects:
  Status[] outStatus;
RangeCoordinates rangeCoordinates = new RangeCoordinates();
  
Dim outStatus() As Status
Dim rangeCoordinates As New RangeCoordinates()
  1. Fügen Sie den Code hinzu, der auf die Arbeitsmappe zeigt, auf die Sie zugreifen möchten. In diesem Beispiel heißt die Arbeitsmappe "Sheet1". Fügen Sie Folgendes in den Code ein:Add the code to point to the worksheet you want to access. In this example, the worksheet is called "Sheet1". Add the following to your code:

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

    Hinweis

    Stellen Sie sicher, dass die gewünschte Arbeitsmappe ein Arbeitsblatt mit dem Namen "Sheet1" enthält, das Werte beinhaltet. Alternativ dazu können Sie die Bezeichnung "Sheet1" im Code auf den Namen der verwendeten Arbeitsmappe ändern. Make sure the workbook you want to open has a worksheet called "Sheet1" that contains values. Alternatively, you can change "Sheet1" in the code to the name of your worksheet.

  2. Fügen Sie den folgenden Code hinzu, um auf die Arbeitsmappe zu zeigen, die Sie öffnen möchten: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"
    

    Wichtig

    Ändern Sie den Arbeitsmappenpfad auf den Speicherort der Arbeitsmappe, die Sie für diese exemplarische Vorgehensweise verwenden. Stellen Sie sicher, dass die Arbeitsmappe vorhanden und der Speicherort, an dem die Arbeitsmappe gespeichert ist, vertrauenswürdig ist. Wenn Sie mithilfe einer HTTP-URL auf den Speicherort einer Arbeitsmappe zeigen, können Sie remote auf diese Arbeitsmappe zugreifen.Change the workbook path to match the location of the workbook you are using for this walkthrough. Make sure the workbook exists and that the location where the workbook is saved is a trusted location. Using an HTTP URL to point to the location of a workbook allows you to access it remotely.

    Hinweis

    Den Pfad zu einer Arbeitsmappe können Sie in Microsoft SharePoint Server 2010 übertragen, indem Sie mit der rechten Maustaste auf die Arbeitsmappe klicken und dann Verknüpfung kopieren.You can get the path to a workbook in Microsoft SharePoint Server 2010 by right-clicking the workbook and selecting Copy Shortcut. Alternativ dazu können Sie Eigenschaften auswählen und den Arbeitsmappenpfad von dort kopieren.Alternatively, you can select Properties and copy the path to the workbook from there.

  3. Fügen Sie den folgenden Code hinzu, um die Anmeldeinformationen für die Anforderung festzulegen.Add the following code to set the credentials for the request.

    Hinweis

    Sie müssen die Anmeldeinformationen explizit festlegen, selbst dann, wenn Sie vorhaben, die Standardanmeldeinformationen zu verwenden.You have to explicitly set the credentials even if you intend to use the default credentials.

  es.Credentials = System.Net.CredentialCache.DefaultCredentials;
  es.Credentials = System.Net.CredentialCache.DefaultCredentials
  1. Fügen Sie den folgenden Code hinzu, um die Arbeitsmappe zu öffnen und auf den vertrauenswürdigen Speicherort zu zeigen, an dem die Arbeitsmappe sich befindet. Platzieren Sie den Code in einem try-Block:Add the following code to open the workbook and point to the trusted location where the workbook is located. Place the code in a try block:
  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. Fügen Sie den folgenden Code hinzu, um ein Objekt zum Definieren von Bereichskoordinaten vorzubereiten, und rufen Sie die GetRange-Methode auf. Der Code gibt außerdem die Gesamtzahl der Zeilen in dem Bereich und den Wert in einem bestimmten Bereich aus.Add the following code to prepare an object to define range coordinates, and call the GetRange method. The code will also print the total number of rows in the range and the value in a particular range.
  
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))
  1. Fügen Sie Code zum Schließen der Arbeitsmappe und der aktuellen Sitzung hinzu. Fügen Sie außerdem eine schließende Klammer am Ende des try-Blocks hinzu.Add code to close the workbook and close the current session. Also add a close bracket to end the try block.

    Wichtig: Es empfiehlt sich, die Arbeitsmappe zu schließen, wenn Sie mit der Sitzung fertig sind.Important: It is good practice to close the workbook if you are done using the session. Dadurch wird die Sitzung geschlossen, und Ressourcen werden freigegeben.This will close the session and free resources.

  
es.CloseWorkbook(sessionId);
}
  
es.CloseWorkbook(sessionId)
  1. Fügen Sie einen catch-Block hinzu, um die SOAP-Ausnahme abzufangen und die Ausnahmemeldung zu drucken:Add a catch block to catch the SOAP exception and print the exception message:
  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

Vollständiger CodeComplete Code

Das folgende Codebeispiel ist der vollständige Code in der Beispieldatei „Class1.cs“ aus dem vorherigen Verfahren.The following code sample is the complete code in the Class1.cs example file described in the previous procedures.

Wichtig: Ändern Sie je nach Bedarf den Pfad der Arbeitsmappe, den Namen des Arbeitsblatts usw.Important: Make changes to the workbook path, sheet name, and so on, as appropriate.


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

Siehe auchSee also

KonzepteConcepts

Zugriff auf die SOAP-APIAccessing the SOAP API

Sonstige RessourcenOther resources

Schritt 1: Erstellen des Webdienst-Client-ProjektsStep 1: Creating the Web Service Client Project

Schritt 2: Hinzufügen eines WebverweisesStep 2: Adding a Web Reference

Schritt 4: Erstellen und Testen der AnwendungStep 4: Building and Testing the Application

Schritt für Schritt: Entwickeln einer benutzerdefinierten Anwendung mit Excel Web ServicesWalkthrough: Developing a Custom Application Using Excel Web Services

Gewusst wie: Definieren vertrauenswürdiger Speicherorte für Arbeitsmappen mithilfe von SkriptsHow to: Trust Workbook Locations Using Script