投稿: Excel チーム 12 月 17 日
今回は、Excel チームでプログラム マネージャーを務める Andrew Stegmaier による記事をご紹介します。
SharePoint の Excel Services は、Excel の強力な機能を拡張し、Excel ワークブックをより大きなソリューションに統合するためのさまざまな方法を開発者に提供します。元々これを利用するには、自身の SharePoint サーバーを導入して保守する必要がありました。しかし時代は変わりました。ビジネス向けの Office 365 製品を利用すれば、SharePoint の Excel Services の強力な機能にクラウド経由でアクセスできます。この記事では、クラウドで Excel Services REST API の利用を開始する際に役立つ例をご紹介します。
Excel Services API とは? その機能とメリット
Web 上で Excel とデータをやり取りする方法 (英語)はいくつかありますが、ここでは REST API を使用する方法 (英語)について取り上げます。REST API には優れた機能 (英語)があり、さまざまな使い方 (英語)ができます。
たとえば、ある監査人が投資の信用リスクを評価するモデルを Excel で作成したとします。この企業の他の従業員がそのモデルを使い始め、すぐに、そのモデルを業務プロセスの一部に組み込むようになりました。しかし利用の拡大に伴い、いくつかの問題が発生しました。ビジネスの目標を達成するためには多くの従業員が共同でモデルを使用する必要があり、多数のコピーが絶えずメールでやり取りされるにつれ、混乱が生じてきたのです。ニーズの変化に応じてモデルを更新する必要があるため、複数のバージョンが存在するようになり、バージョンを間違うことがよくありました。それに加え、この企業ではモデルから得た結果の一部を組織外部の人と共有する場合もあるものの、スプレッドシートに含まれる機密事項は共有したくないと考えています。
ある管理者は、カスタム アプリケーションを開発してプロセスを合理化し、これらの問題に対処することを提案しました。アプリケーションの開発者は、Excel Services を使用すれば、既存のモデルに含まれているロジックをより大規模なアプリケーションに統合して、セキュリティ、ユーザー ロール、ワークフロー、その他のシステムとの統合といった機能を追加することができます。カスタム アプリケーションによって、エンド ユーザーにはシンプルかつ統合されたエクスペリエンスがもたらされる一方で、当初の作成者であるアナリストは、自分の Excel スキルを生かして引き続きモデルの保守を行えます。どうです、すばらしいと思いませんか?
Excel Services の使用を開始するには
REST API は SharePoint 2010 で追加されました。したがって、バージョン 2010 以降の SharePoint サーバーを導入しているお客様は、多数の有用なドキュメントを参考にして、使用を開始できます。ただ、ますますビジネスはクラウドに移行しつつあります。ビジネス向け Office 365 製品のサブスクリプションを所有しているお客様も、オンプレミス インフラストラクチャを購入、保守、管理する必要なく、SharePoint の強力な機能を利用できます。REST API は、SharePoint Online を含むほとんどの Enterprise プランで利用可能です。具体的にどの SKU でサポートされているかに関しては、こちらの表の Excel Services の行をご覧ください。お客様のプランがこれらの 1 つに該当し、使用を開始する場合は、以下のヒントがお役に立ちます。
SharePoint Online での相違点
最も大きな違いは、認証方法です。データをすべての人に提供するのは避けたいとお考えでしょう。そこで、Excel Services では、ワークブックとやり取りを行うアプリケーションに何らかの資格情報を要求します。SharePoint Online にあるワークブック (およびそれらとのやり取りに使用される Excel Services API) は、企業のネットワークではなくマイクロソフトのデータセンターに存在しています。したがって、企業の Active Directory サーバーなどのリソースはこのコンテキストでは利用できないため、通常の認証方法は機能しません。しかしご心配は無用です。以下で紹介する手順に従えば、従来のようにスムーズに SharePoint Online での操作が可能です。
サンプル アプリケーションでの REST API の使用
Excel Services API から SharePoint Online のワークブックに接続する方法を説明するために、単純な Visual C# コンソール アプリケーションを Visual Studio で作成してみましょう。このアプリケーションでは、ワークブックに接続し、データを取得してそれを処理します。上述の例を広げて、ワークブックは、先ほどの企業が投資している架空の会社、Contoso 社の財政状態を要約した財務モデルであると仮定します。
組織内には多くの類似したモデルも存在する可能性があり、それぞれのモデルがポートフォリオにある異なる企業のリスクを表しています。レポート目的またはコンプライアンス上の目的で、多くの異なるファイルから重要な数値を集約する場合、手動でそれを行おうとすると骨の折れる作業になります。そのような処理を行うプログラムが作成できれば、大助かりだと思いませんか? Excel Services REST API を使用すれば、それが可能なのです。
最初に、SharePoint クライアント コンポーネントを開発マシンにインストールします。Visual Studio と共にインストール済みである可能性がありますが、ダウンロード センター (英語)から個別にインストールすることもできます。インストールに成功すると、Microsoft.SharePoint.Client アセンブリと Microsoft.SharePoint.Client.Runtime アセンブリがマシンに展開されます。これらは正常に接続するために必要となるリソースを提供します。
ここで、Visual Studio をオープンし、新しいコンソール プロジェクトを作成します ([File] > [New] > [Project])。
ソリューション エクスプローラーで、Microsoft.SharePoint.Client.Runtime アセンブリと System.Runtime.Serialization アセンブリへの参照を追加します。たとえば、私のコンピューター上では以下の場所にあります。
- C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll
- C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Runtime.Serialization.dll
これが完了すると、ソリューション エクスプローラーには少なくとも以下の参照が表示されます。
次に、Program.cs ファイルを開き、以下の名前空間をインポートします。
これで、アプリケーションの作成を開始する準備ができました。最初にいくつかのコードを追加して、ユーザーがユーザー名とパスワードを入力できるようにします。
これでユーザー名とパスワードが適切な変数に格納されるので、それらを使用して SharePointOnlineCredentials オブジェクト (前の手順でインストールした Microsoft.SharePoint.Client アセンブリから提供) を作成します。
実際のアプリケーションでは、この行を try/catch ブロックの中に配置すれば、入力されたユーザー名またはパスワードが不正である場合に対処できるようになります。
次に、REST 要求を作成します。これは、Excel Services に、ワークブック内の特定のセルを表す JSON フィードを要求するものです。このシナリオでは、ポートフォリオ内の企業が抱えるすべての負債をまとめて参照できるようにしたいとします。負債の値は、各モデルの中で「liabilities」という名前が付けられた範囲に格納されているので、この値をワークシートから取得し、合計を求めます。
ここで、調査対象ファイルを指す URL を作成し、変更します。これを行うには、下のコードにある <SharePointOnlineSite>、<DocumentLibrary>、<FileName>、<RangeName> を SharePoint Online サイトにあるワークブック、範囲名に置き換えます。MSDN では、各種の REST 操作を行う URL の構築方法に関する詳しい情報を紹介しています。
送信前に HTTP ヘッダーを変更する行に注意してください。これは、SharePoint Online の REST 要求では必須です。これによって、サーバーに対して、通知なしに失敗せずに、クライアントに資格情報を問い合わせるよう強制しているからです。
認証ステップと同様に、実際のアプリケーションでは GetReponse() メソッドを try/catch ブロックに配置して、失敗の処理を行う場合もあります。
これで JSON 応答ストリームを取得できるようになったので、これをオブジェクトにシリアル化してアクセスを容易にします。まず、CellValue 型用のデータ コントラクトを定義します。ここでは、Excel Services が返す JSON に一致するように、データ構造を設計します。これは、メインの Program クラスの外で行います。
コントラクトはこの型に対して定義されるため、DataContractJsonSerializer オブジェクトを使用して JSON ストリームを容易にシリアル化できます。シリアル化が済んだら、単純なドット構文を使用して、フォーマット済みの値 (fv) にアクセス可能です。
これが最後の手順です。[Start] をクリックして、プログラムの動作を確認してください。
実際のアプリケーションでは、これらと同様の手順を多数のワークブックに対して実行できるので、手動での編集作業に要する膨大な時間の節約が期待できます。
これで、SharePoint Online で Excel REST API を利用する単純なアプリケーションが完成しました。
たくさんのご意見をお待ちしています
マイクロソフトでは、上述したテクニックを生かして皆様が開発されたアプリケーションについてお聞きしたいと考えています。ぜひ、ご意見ご感想をコメント欄にご記入ください。
-- Excel 担当プログラム マネージャー、Andrew Stegmaier