手順 3: Web サービスへのアクセスStep 3: Accessing the Web Service

プロジェクトに Excel Web Services への参照を追加したところで、次の手順では、Web サービスのプロキシ クラスのインスタンスを作成します。こうすると、プロキシ クラスのメソッドを呼び出すことによって、Web サービスのメソッドにアクセスできます。アプリケーションがこれらのメソッドを呼び出すと、Visual Studio によって生成されたプロキシ クラスのコードが、アプリケーションと Web サービスの間の通信を処理します。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.

最初に、Web サービスのプロキシ クラス ExcelWebService のインスタンスを作成します。次に、プロキシ クラスを使用して、いくつかの Web サービスのメソッドとプロパティを呼び出します。 呼び出しを使用して、ブックを開き、セッション ID を取得し、既定の資格情報を渡し、範囲座標オブジェクトを定義し、範囲座標オブジェクトを使用する範囲を取得し、ブックを閉じ、SOAP 例外をキャッチします。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.

Web サービスにアクセスするAccessing the Web Service

ディレクティブを追加するにはTo add directives

  1. 前に Web 参照を追加した際、ExcelService という名前のオブジェクトが . という名前空間に作成されました。この例では、オブジェクトの名前は SampleApplication.ExcelWebService です。このチュートリアルでは、SOAP 例外をキャッチする方法も示します。これを行うには、 System.Web.Services.Protocols オブジェクトを使用します。名前空間 System.Web.Services.Protocols は、XML Web サービス クライアントと ASP.NET を使用して作成された XML Web サービスの間の通信中に、回線全体でデータの伝送に使用するプロトコルを定義するクラスで構成されています。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.

これらのオブジェクトの使用を促進するには、まず名前空間をディレクティブとして Class1.cs ファイルに追加します。このようにして、このディレクティブを使用する場合、名前空間内の型を完全修飾する必要はありません。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. これらのディレクティブを追加するには、次のコードを、Class1.cs ファイルのコードの先頭、 using System: の後に追加します。 using System: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

Web サービスを呼び出すにはTo call the Web service

  1. の左中かっこの後に次のコードを追加して、Web サービス プロキシ オブジェクトのインスタンス化と初期化を行います。static void Main(string[] args)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. 次のコードを追加して、状態の配列および範囲座標オブジェクトを作成します。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. アクセスするワークシートを指すコードを追加します。この例では、ワークシートは「Sheet1」といいます。 コードに次を追加します。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";
    
```VB.net
Dim sheetName As String = "Sheet1"
```
> [!NOTE]
> <span data-ttu-id="1d2dc-p106">開くブックに、値を含む「Sheet1」というワークシートがあるようにしてください。あるいは、コード内の「Sheet1」を存在するワークシート名に変更することができます。</span><span class="sxs-lookup"><span data-stu-id="1d2dc-p106">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.</span></span> 
  1. 開きたいブックをポイントするには次のコードを追加します。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]
> <span data-ttu-id="1d2dc-p107">このチュートリアルで使用しているブックの場所に一致するようにブックのパスを変更します。 ブックが存在し、ブックの保存場所が信頼できる場所であるようにします。 ブックの場所を指す HTTP URL を使用すると、リモートでアクセスすることができます。</span><span class="sxs-lookup"><span data-stu-id="1d2dc-p107">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.</span></span> 

> [!NOTE]
> <span data-ttu-id="1d2dc-131">ブックを右クリックして **[ショートカットのコピー]** を選択すると、Microsoft SharePoint Server 2010 でブックへのパスを取得できます。</span><span class="sxs-lookup"><span data-stu-id="1d2dc-131">You can get the path to a workbook in Microsoft SharePoint Server 2010 by right-clicking the workbook and selecting **Copy Shortcut**.</span></span> <span data-ttu-id="1d2dc-132">または、**[プロパティ]** を選択してそこからブックへのパスをコピーすることもできます。</span><span class="sxs-lookup"><span data-stu-id="1d2dc-132">Alternatively, you can select **Properties** and copy the path to the workbook from there.</span></span>
  1. 次のコードを追加して、要求の資格情報を設定します。Add the following code to set the credentials for the request.

    注意

    既定の資格情報を使用する場合でも、資格情報を明示的に設定する必要があります。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. 次のコードを追加して、ブックを開き、ブックが配置されている信頼できる場所を指定します。このコードは try ブロックに配置します。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. 次のコードを追加して、範囲座標を定義し、 GetRange メソッドを呼び出すオブジェクトを準備します。このコードは、範囲内の行数の合計と、特定の範囲の値を出力することもします。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: " &amp; rangeResult1.Length)
Console.WriteLine("Value in range is: " &amp; (CType(rangeResult1(5), Object()))(2))
  1. コードを追加してブックを閉じ、現在のセッションを閉じます。また、try ブロックを終了する右大括弧を追加します。Add code to close the workbook and close the current session. Also add a close bracket to end the try block.

    重要: セッションの使用が完了したら、ブックを閉じることをお勧めします。Important: It is good practice to close the workbook if you are done using the session. これにより、セッションが終了し、リソースが解放されます。This will close the session and free resources.


es.CloseWorkbook(sessionId);
}

es.CloseWorkbook(sessionId)
  1. SOAP 例外をキャッチし、例外メッセージを出力する catch ブロックを追加します。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

完全なコードComplete Code

次のコード サンプルは、ここまでの手順で作成した Class1.cs サンプル ファイルの完全なコードです。The following code sample is the complete code in the Class1.cs example file described in the previous procedures.

重要: ブックのパスやシート名などは、適宜変更してください。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

関連項目See also

概念Concepts

SOAP API にアクセスするAccessing the SOAP API

その他のリソースOther resources

ステップ 1: Web サービス クライアント プロジェクトを作成するStep 1: Creating the Web Service Client Project

手順 2: Web 参照を追加するStep 2: Adding a Web Reference

手順 4: アプリケーションのビルドとテストを行うStep 4: Building and Testing the Application

チュートリアル: Excel Web Services を使用してカスタム アプリケーションを開発するWalkthrough: Developing a Custom Application Using Excel Web Services

[方法] スクリプトを使用してブックの場所を信頼するHow to: Trust Workbook Locations Using Script