Freigeben über


Schritt 3: Zugreifen auf den Webdienst

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.

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. Sie verwenden die Aufrufe, um eine Arbeitsmappe zu öffnen, die Sitzungs-ID abzurufen, die Standardanmeldeinformationen zu übergeben, das Bereichskoordinatenobjekt zu definieren, den Bereich abzurufen, der das Bereichskoordinatenobjekt verwendet, die Arbeitsmappe zu schließen und die SOAP-Ausnahmen abzufangen.

Zugreifen auf den Webdienst

So fügen Sie Anweisungen hinzu

  1. Als Sie den Webverweis zuvor hinzugefügt haben, wurde ein Objekt mit dem Namen ExcelService in einem Namespace namens <yourProject> erstellt.< webReferenceName>. 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.

  1. Um diese Direktiven hinzuzufügen, fügen Sie den folgenden Code am Anfang des Codes in der Datei Class1.cs hinzu, nachdem using System:
  
using SampleApplication.ExcelWebService;
using System.Web.Services.Protocols;
  
Imports SampleApplication.ExcelWebService
Imports System.Web.Services.Protocols

So rufen Sie den Webdienst auf

  1. Instanziieren und initialisieren Sie das Webdienstproxyobjekt, indem Sie den folgenden Code nach der öffnenden Klammer in static void Main(string[] args)hinzufügen:
  
ExcelService es = new ExcelService();
  Dim es As New ExcelService()
  1. Fügen Sie folgenden Code hinzu, um ein Statusarray und Bereichskoordinatenobjekte zu erstellen:
  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:

    
    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.

  2. Fügen Sie den folgenden Code hinzu, um auf die Arbeitsmappe zu zeigen, die Sie öffnen möchten:

    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.

    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. Alternativ dazu können Sie Eigenschaften auswählen und den Arbeitsmappenpfad von dort kopieren.

  3. Fügen Sie den folgenden Code hinzu, um die Anmeldeinformationen für die Anforderung festzulegen.

    Hinweis

    Sie müssen die Anmeldeinformationen explizit festlegen, selbst dann, wenn Sie vorhaben, die Standardanmeldeinformationen zu verwenden.

  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:
  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.
  
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. Fügen Sie Code zum Schließen der Arbeitsmappe und zum Beenden der aktuellen Sitzung hinzu. Fügen Sie außerdem am Ende des try-Blocks eine schließende Klammer hinzu.

    Wichtig: Es empfiehlt sich, die Arbeitsmappe zu schließen, wenn Sie mit der Sitzung fertig sind. Dadurch wird die Sitzung geschlossen, und Ressourcen werden freigegeben.

  
es.CloseWorkbook(sessionId);
}
  
es.CloseWorkbook(sessionId)
  1. Fügen Sie einen catch-Block hinzu, um die SOAP-Ausnahme abzufangen und die Ausnahmemeldung zu drucken:
  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 Code

Das folgende Codebeispiel ist der vollständige Code in der Beispieldatei „Class1.cs“ aus dem vorherigen Verfahren.

Wichtig: Ändern Sie je nach Bedarf den Pfad der Arbeitsmappe, den Namen des Arbeitsblatts usw.


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 auch

Konzepte

Zugriff auf die SOAP-API

Sonstige Ressourcen

Schritt 1: Erstellen des Webdienst-Client-Projekts

Schritt 2: Hinzufügen eines Webverweises

Schritt 4: Erstellen und Testen der Anwendung

Schritt für Schritt: Entwickeln einer benutzerdefinierten Anwendung mit Excel Web Services

Gewusst wie: Definieren vertrauenswürdiger Speicherorte für Arbeitsmappen mithilfe von Skripts