Excel 2007でWebサービスのデータを使用する
ここでは、既存のWebサービスのデータを使用することを考えます。クライアントがMicrosoft Officeを使用しているものと仮定します。現在、Microsoft Officeプログラムのオートメーションやプログラミングは、以前のようにVBA用のスクリプト環境を使う方法ではなく、Visual Studio 2008で直接行うようになっています。Visual Studio 2008の起動後、新規のOffice 2007 Excel Workbookプロジェクトを作成し、それに名前'MyEXCEL'を付け、[OK]をクリックします。
入力が促されたら、新規のExcelワークブックを作成することに同意し、[OK]をクリックします。なお、状況によっては、この操作を行う前に、他のすべてのMicrosoft Office 2007プログラムを閉じる必要があります。これで完全に使用可能な新規のワークブックがVisual Studio内に表示されます。
[Project]メニューの[Add Service Reference...]をクリックします。
入力が促されたら、アドレスフィールドに'http://localhost:8888/MyDISH'と入力し、[Go]をクリックします。これで、先ほど作成したWebサービスが表示されます。
以前作成した'MyData'サービスが[Operations]ボックスに表示されています。その名前空間に'MyService'という値を与え、[OK]をクリックします。これで、Webサービスを使用するためのコードが自動的に作成されます。'app.config'ファイルが自動的に更新されると共に、アプリケーションへの参照が追加されることに注意してください。
次に、ツールボックスからワークシートへ'Button'を追加します。
必要に応じてボタン表面のテキストを変更してから、ボタンをダブルクリックしてコードの編集を開始します。メソッド'private void button1_Click(object sender, EventArgs e)'に対して、次のコードを入力します。
private void button1_Click(object sender, EventArgs e) { int row = 3; //Start inserting values as of row 4 (Row 3 in zero‐base) int sqlCode; DataTableReader reader; //A reader is used to step through the data. MyService.MyDISHSoapPortClient webService; /* Initialize the webservice, the constructor was auto‐created by VS */ webService = new MyEXCEL.MyService.MyDISHSoapPortClient(); /* Use the MyData procedure created in SQL Anywhere to create a reader */ reader = webService.MyData(out sqlCode).CreateDataReader(); /* Read each line of the data table that is returned */ while (reader.Read()) { /* Iterate through each column/field of the current row */ for (int i = 0; i < reader.FieldCount; i++) { /* Write the data value onto the spreadsheet */ this.Cells[row, i + 1] = reader.GetValue(i); } row++; } }
要するに、これはWebサービスからデータを取得して、ワークシートに入れるコードです。これを実現するために'MyService'クラスのインスタンスが生成されます。そのコードはVisual Studioによって自動的に作成されたものです。'DataTableReader'オブジェクトを使用してデータが順に読み込まれ、ワークシートの各セルに値が設定されます。'Debug'ボタンをクリックするか、F5キーを押して、このソリューションをテストします。ワークブックがロードされたら、ボタンをクリックすると、Webサービスからデータが取得され、ワークシート内に自動的に設定されます。
このデータを使用すれば、Excel内からカスタムインボイスを作成するような処理を実現できます。ここでのポイントは、汎用的なWebサービスからデータが自動的に取得され、Webサービスをおのおのの要件に応じて個別に構成しなくてもよいことです。これは簡単なデモですが、パラメータを使うような構成も可能です。つまり、Webサービスのメソッドにパラメータを与え、そのパラメータを使用して、たとえば、個々の顧客に関する特定のデータを顧客のクライアントIDに基づいて取得することができます。