C#やVisual Basicを使って、Excelファイルを生成したり編集したりする方法を学びましょう。無償で利用できるVisual C# 2010 Expressを使ったExcelファイルの生成法などを学びます。

 Microsoft Excel(以下、Excel)は、世界中で最も利用されているビジネスアプリケーションの一つではないでょうか。Part1で学んだVBA(Visual Basic for Applications)を使ってExcelの機能を操作・拡張し、作業効率を向上させている人は多いと思います。例えば、複数ファイルから分析したいデータを自動集計する、あるいは最新のデータと前回のデータの差分を視覚化する、といった処理に利用できます。このようにVBAを用いたマクロは、作業を自動化する処理や繰り返しを多用する処理に適しています。また、Excelさえあれば利用できることも大きなメリットでしょう。

これから業務アプリを作るなら.NETベースで

 VBAは、Excelユーザーなら(使い方さえわかっていれば)だれでも手軽に利用できますが、本格的な業務アプリケーションを作るとなると、そう簡単にはいきません。

 例えば、データベースから情報を取り込み、Excelファイルを自動生成するアプリケーションを考えてみましょう。VBAでシステムを開発することもできますが、VBAは.NET Framework登場以前のVisual Basic 6.0をベースしたマクロ言語であり、.NET Frameworkを利用した現在のC#やVisual Basicによるアプリケーションと比べると処理性能や保守性、セキュリティに不安が残ります。

 そこで多くの企業が、VBAの代わりに、.NET FrameworkとC#やVisual Basicを利用した業務アプリケーションを開発しています。その多くが、次に述べるオブジェクトモデルを生かしたアプリケーションです。

 ExcelやWordなどのMicrosoft Office製品は、アプリケーションを構成する各要素や機能をオブジェクトと呼ぶ独立した単位で提供しています。各オブジェクトは階層構造になっていて、Excelであれば最上位にアプリケーション自体を示すApplicationオブジェクトがあります。その下にワークブックを表すWorkbookオブジェクトがあり、さらに下にはワークシートを表すWorksheetsオブジェクトがある、といった具合です。各オブジェクトに.NET Frameworkベースのアプリケーションからアクセスして、Excelファイルを生成・操作できます。

 ベースとなる.NET Frameworkでは、後述する新しい文書フォーマットのOffice Open XML、プレゼンテーション技術のWPF(Windows Presentation Foundation)、通信機能を司るライブラリのWCF(Windows Communication Foundation)などに対応しています。.NETベースに移行することでこれらの技術を生かしたアプリケーションを作りやすくなるわけです。

 また、VBAでのマクロは、各Excelファイルやワークブックそのものにコピーされます。例えば、ある開発者がExcelのワークブックにVBAの処理を組み込んで、そのワークブックを組織内で共同利用したいと考えたとしましょう。その場合には、VBAの処理を組み込んだワークブックを共同利用するすべての人に配布しなければなりません。一方、.NET Frameworkベースのアプリ(以下、.NETアプリ)では、バージョン管理や統合管理などの機能が簡単に組み込めるので、面倒になりがちな配布作業などから解放されます。

 こうしたことから、Excelの機能を生かした本格的な業務アプリをこれから開発する場合は、.NETアプリを前提にして検討するとよいでしょう。VBAとの対比ということでは、ちょっと極端ですが、

  •  VBAアプリ:個人ユーザー向け
  •  .NETアプリ:業務システム向け
といえるでしょう。

オブジェクトモデルの問題点
 Excelのオブジェクトモデルを利用した.NETアプリ開発には問題もあります。実は、オブジェクトモデルを利用した自動化処理をマイクロソフトはサポートしていないのです。サポートしていない理由は、Excelのオブジェクトモデルを利用することによるメモリー管理の難しさ、ExcelをはじめとするOfficeアプリケーションが対話型であること、などが挙げられます。
 また、Officeアプリケーションは、ユーザーがWindowsにログオンしていることを前提に動作します。それぞれのオブジェクトには、ユーザーごとの各種のアプリ設定やデータを保持しているユーザープロファイルと連動する処理があります。例えば、例外発生時には、ユーザープロファイルを基に次の処理を委ねるダイアログを表示したりします。このため、不特定多数のユーザーがExcelファイルを自動生成したりするようなアプリには向きません。