ブック全体またはスナップショットを取得する

最終更新日: 2010年3月24日

適用対象: SharePoint Server 2010

この例では、Excel Web Services を使用して、ブック全体、ファイル全体のスナップショット、または単にファイル内の表示可能なシートやオブジェクトのスナップショットを取得する方法を示します。ブックまたはスナップショットの取得は、最新のブックのコピーを保存して、それをどこかに格納したり、だれかに送信したりする場合などに役立ちます。

スナップショットは、Excel Calculation Services によって生成されるブックであり、Excel Services セッションでのブックの現在の状態を示します。一部のスナップショット ("公開済みのアイテムのスナップショット"と呼ばれる) には、作成者がファイルをサーバーへ保存するときに表示可能として選択した Excel ファイルの一部分のみが含まれます。スナップショットには、元のファイルのレイアウトや形式、および Excel Calculation Services によって計算された最新の値が含まれますが、Excel 数式または外部データ接続は含まれません。Excel Services は、サーバー上の Excel ファイルを開き、データ ソースを最新の情報に更新して、すべての Excel 数式を計算します。ユーザーまたはアプリケーションがスナップショットを要求すると、Excel Services は Web サービス API を使用してスナップショットを生成し、送り返します。

サーバー上の実際のファイルにアクセスする権限を持っていない場合でも、サーバーに既に保存したブックのスナップショットを取得できます。

ブック全体またはスナップショットの種類のうちのいずれかを取得するには、Web サービスの GetWorkbook メソッドを使用します。たとえば、以下のコードは Excel ブック全体のスナップショットを返します。ここでは、GetWorkbook メソッドの 2 つ目の引数として、WorkbookType.FullSnapshot 列挙を使用しています。

byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.FullSnapshot, out status);
Dim workbook() As Byte = xlService.GetWorkbook(sessionId, WorkbookType.FullSnapshot, status)

GetWorkbook メソッドは、セッションに読み込まれたものと同じ Excel ファイル形式でバイト配列を返します。

Excel ブックの作成者が、Excel のブックをサーバーに保存するときに表示可能として選択したアイテムのスナップショットを取得するには、ここに示すように WorkbookType.PublishedItemsSnapshot 列挙を使用します。

byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.PublishedItemsSnapshot, out status);
Dim workbook() As Byte = xlService.GetWorkbook(sessionId, WorkbookType.FullSnapshot, status)

現在のセッション状態でのブック全体のスナップショットを取得するには、WorkbookType.FullWorkbook 列挙を使用します。

byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.FullWorkbook, out status);
Dim workbook() As Byte = xlService.GetWorkbook(sessionId, WorkbookType.FullWorkbook, status)

WorkbookType.FullWorkbook オプションは、ユーザーがファイルを開く権限を持っている場合にのみ機能します。持っている権限が読み取り専用の場合、呼び出しは失敗します。

場合によっては、コードで GetWorkbook 呼び出しの結果を保存する必要があります。 ブックを保存する方法の説明については、「[方法] ブックを保存する」の例を参照してください。

GetWorkbook メソッドおよび WorkbookType 列挙の詳細については、Excel Web Services のリファレンス ドキュメントを参照してください。

以下のプログラム (コンソール アプリケーション) は、サーバー上のブックへのパスであるコマンド ラインの引数を受け取ります。プログラムは、Web サービスを呼び出してサーバー上のブックを開き、スナップショットを取得します。その後、スナップショットは標準出力に書き込まれ、新しいスナップショット ファイルにリダイレクトできるようになります。

using System;
using System.IO;
using System.Text;
using System.Web.Services.Protocols;
// TODO: Change the using GetSnapshot.myServer02 statement 
// to point to the Web service you are referencing.
using GetSnapshot.myServer02;

namespace GetSnapshot
{
    class ExcelServicesSnapshot
    {
        static void Main(string[] args)
        {
            try
            {
                if (args.Length < 1)
                {
                    Console.Error.WriteLine("Command line arguments should be: GetSnapshot [workbook_path] > [snapshot_filename]");
                    return;
                }
                // Instantiate the Web service and 
                // create a status array object.
                ExcelService xlService = new ExcelService();
                Status[] status;
                
                xlService.Timeout = 600000;
                // Set credentials for requests.
                // Use the current user's logon credentials.
                xlService.Credentials =   
                    System.Net.CredentialCache.DefaultCredentials;
                 
                // Open the workbook, then call GetWorkbook 
                // and close the session.
                string sessionId = xlService.OpenWorkbook(args[0], "en-US", "en-US", out status);
                byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.PublishedItemsSnapshot, out status);
                // byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.FullWorkbook, out status);
                // byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.FullSnapshot, out status);

                // Close the workbook. This also closes the session.
                status = xlService.CloseWorkbook(sessionId);

                // Write the resulting Excel file to stdout 
                // as a binary stream.
                BinaryWriter binaryWriter = new BinaryWriter(Console.OpenStandardOutput());
                binaryWriter.Write(workbook);
                binaryWriter.Close();
            }

            catch (SoapException e)
            {
                Console.WriteLine("SOAP Exception Message: {0}", e.Message);
            }

            catch (Exception e)
            {
                Console.WriteLine("Exception Message: {0}", e.Message);
            }   
        } 
    }
}
Imports System
Imports System.IO
Imports System.Text
Imports System.Web.Services.Protocols
' TODO: Change the using GetSnapshot.myServer02 statement 
' to point to the Web service you are referencing.
Imports GetSnapshot.myServer02

Namespace GetSnapshot
    Friend Class ExcelServicesSnapshot
        Shared Sub Main(ByVal args() As String)
            Try
                If args.Length < 1 Then
                    Console.Error.WriteLine("Command line arguments should be: GetSnapshot [workbook_path] > [snapshot_filename]")
                    Return
                End If
                ' Instantiate the Web service and 
                ' create a status array object.
                Dim xlService As New ExcelService()
                Dim status() As Status

                xlService.Timeout = 600000
                ' Set credentials for requests.
                ' Use the current user's logon credentials.
                xlService.Credentials = System.Net.CredentialCache.DefaultCredentials

                ' Open the workbook, then call GetWorkbook 
                ' and close the session.
                Dim sessionId As String = xlService.OpenWorkbook(args(0), "en-US", "en-US", status)
                Dim workbook() As Byte = xlService.GetWorkbook(sessionId, WorkbookType.PublishedItemsSnapshot, status)
                ' byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.FullWorkbook, out status);
                ' byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.FullSnapshot, out status);

                ' Close the workbook. This also closes the session.
                status = xlService.CloseWorkbook(sessionId)

                ' Write the resulting Excel file to stdout 
                ' as a binary stream.
                Dim binaryWriter As New BinaryWriter(Console.OpenStandardOutput())
                binaryWriter.Write(workbook)
                binaryWriter.Close()

            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
        End Sub
    End Class
End Namespace

以下のコマンド ラインおよび引数を使用して、GetSnapshot アプリケーションを実行します。

GetSnapshot.exe [workbook_path] > [snapshot_filename]

次に例を示します。

C:\>GetSnapshot.exe http://myServer02/reports/reports/OriginalWorkbook.xlsx > SnapshotCopy.xlsx

前述のコマンド ラインの例を使用した場合、GetSnapshot ツールは、新しいファイルを "C:\" ディレクトリに配置します。

注意

スナップショットを取得するブックは、信頼できる場所にある必要があります。

堅牢なプログラミング

アクセス権を持っている Excel Web Services サイトへの Web 参照を追加していることを確認してください。参照している Web サービス サイトを示すように using GetSnapshot.myServer02; ステートメントを変更します。

関連項目

タスク

手順 1 : Web サービス クライアント プロジェクトを作成する

手順 2 : Web 参照を追加する

手順 3 : Web サービスにアクセスする

手順 4 : アプリケーションをビルドしてテストする

[ウォークスルー] Excel Web Services を使用してカスタム アプリケーションを開発する

[方法] 場所を信頼する

概念

SOAP API にアクセスする