Excel Web Service (Excel サービスの Web サービス版) を使ってみましょう


環境:  Office Sharepoint Server 2007 Beta 2

こんにちは。

新しい Office Sharepoint Server 2007 では、検索など多くの場面で Web サービスを使用したサービスの利用が可能になっています。ここでは、そのうちの 1 つである Excel Web Service (Excel Web サービス) を使った実装のチュートリアルを記載します。

Excel Service (Excel サービス) と言えば、Office Sharepoint Server 2007 で追加された BI の目玉機能の 1 つです。その強力で楽しい機能については Office Developer Center (Japan): http://www.microsoft.com/japan/msdn/office/ からもスクリーンキャストなどで参照できますので是非確認してみてください。
今回はこの強力な仕組みを Web Service (Web サービス) を使用してコードからアクセスするというチュートリアルをご紹介しましょう。
尚、わたしの中で、日本語版で未検証のため、申し訳ありませんが、ここでは英語版を使用して検証しています。

【ステップ: 事前設定をする】

以下では、Excel 2007 のシートに所定の計算ロジックを組み込んで、ファイルを Office Sharepoint Server 2007 に Publish (発行) していきます。このため、まずは、Excel Service (Excel サービス) そのものを使えるよう、事前設定をしておきましょう。
Sharepoint Central Administration を起動し、画面左の Shared Service Administration から今回 Publish する Web アプリケーションの SSP を選択し (初期インストール時は 1 つです)、表示される画面で、[Excel Services Setting] - [trusted file location] をクリックしてください。
表示される画面で、trusted location として今回 Publish する先の配置場所を設定してください。(Web アプリケーションそのものを追加して、[Trust Children] をチェックしても結構です。)

【ステップ: Excel ワークブックをデザインする】

ここでは、消費税込みの価格を計算するいう簡単なサンプルを作ります。
Sheet1 のセル B1 を提示価格、セル B2 を消費税込みの価格となるよう、関数 = [セル B1 の値] * 1.03 を設定した Excel ワークブックを作成しましょう。
通常の Excel サービスの構築の際と同様、作成した領域をすべて Named Range とするため、上記の B1 を選択して左上の領域名の記入欄に「Standard_Cost」、B2 を選択して左上に「Taxinc_Cost」と Named Range の名称を記入します。

【ステップ: Excel Service (Excel サービス) として発行する】

では上記のワークブックの発行をおこないます。
Excel 2007 のコントロールメニューから [Publish] を選択し、先程権限を付与した Web 上のロケーションを選択して Shared Documents などの所定のドキュメントライブラリにワークブックを保存してください。

【ステップ: コードを実装する】

では、いよいよ実装です。
Visual Studio 2005 を起動し (ここに記載している実装だけであれば、VSTO は必要ありません)、今回はお試しとして、C# の Windows Application のプロジェクトを作成してください。
ソリューションエクスプローラを右クリックし、[Add Web Reference ...] を選択し、以下の URL を入力して Web 参照を追加してください。今回は、Web Reference Name として「ExcelService」という名称で参照することにします。

[Web Application]/_vti_bin/excelservice.asmx

では、上記の参照を使ってコードを記載します。
Form にボタンを配置し、ボタンを押された際のイベント処理として、以下のコードを記載してください。尚、変数 workbookPath の値は皆さんの配置環境にあわせて適宜変更してください。

int StandardCost = 4000;

object taxincCost;
string workbookPath = "http://tsmatsuz21:34549/sites/officetest/Shared%20Documents/book1.xlsx";
string sheetName = "Sheet1";
string standardCostRangeName = "Standard_Cost";
string taxincCostRangeName = "Taxinc_Cost";
ExcelService.Status[] status;

ExcelService.ExcelService xlSvc = new ExcelService.ExcelService();
xlSvc.Credentials = System.Net.CredentialCache.DefaultCredentials;
string sessionID = xlSvc.OpenWorkbook(workbookPath, "en-US", "en-US", out status);
status = xlSvc.SetCellA1(sessionID, sheetName, standardCostRangeName, StandardCost);
xlSvc.CalculateA1(sessionID, sheetName, taxincCostRangeName);
taxincCost = xlSvc.GetCellA1(sessionID, sheetName, taxincCostRangeName, false, out status);
status = xlSvc.CloseWorkbook(sessionID);

MessageBox.Show(Convert.ToString(taxincCost));

【ステップ: 実行する】

では実行してみましょう!

この Web サービスを使って、例えば、VSTO などで SQL Server などのデータベースから企業データを検索し、抽出した情報に対する加工のロジック (計算ロジックなど) を Excel のシートとして共有するといった使い方ができます。また、従来 Excel で管理していた特定のビジネスロジックなどを Excel のシートとして該当部門で管理するなど、役割を明確に分担することも可能です。
他に、このブログでも記載している CustomXml のイベント処理を VSTO アドインとして組み込んで、この仕組みと連携することで、文書の所定の領域が変更されたら別の領域を自動計算するといったアプリケーションや、カスタムタスクペインから計算 (ロジック) を呼び出す処理などを開発 (構築) する、など、他の仕組みと連携してさまざまに活用することができます。可能性は無限大ですね。

尚、ここでは説明していませんが、検索だけでなく更新も可能です。また、この Web サービスを使ってユーザが独自に定義した関数 (User-defined functions = UDFs) を使用することも可能です。(UDFs を使用する場合は、あらかじめ SSP 上で設定が必要ですので注意してください。)

今回は簡単なコードですから、1回で記載してますが、デベロッパーエバンジェリストの中原さんのご提案で、次回以降は、長い記事は連載で記載することにします(>> 中原さん、ありがとうございます!)。

Comments (0)

Skip to main content