C#でのExcelファイルの読み取り - 無料でオープンソースのライブラリを使用して

C#アプリケーションでExcelファイルを直接読み取るのに苦労していることはありませんか?もしそうなら、あなただけではありません!多くの開発者は、手動のプロセスに依存せずにExcelスプレッドシートからデータを抽出するという課題に直面しています。良いニュースは、オープンソースライブラリを使用してこの課題を効率的かつ無料で解決する方法があることです。このブログ投稿では、手間のかかる手動ステップを排除し、C#プログラムから直接Excelファイル(.xls)を読み込む方法について探求します。

問題:Excelファイルの手動処理

従来、多くの開発者は、ExcelシートをUnicodeテキスト形式にエクスポートし、その後、生成されたタブ区切りファイルを解析する手動アプローチを選択しています。この方法は機能しますが、最も効率的な手段ではありません。頻繁にこのプロセスを繰り返す必要がある場合や複数のファイルを扱う場合、面倒に感じるかもしれません。

幸いなことに、プログラムでExcelファイルを読むためのより良い方法があります。解決策を見ていきましょう!

解決策:OLE DBを使用してExcelファイルを読み取る

C#でExcelファイルを読み取る最も簡単な方法の1つは、OLE DB(オブジェクトリンクおよび埋め込みデータベース)プロバイダーを使用することです。OLE DBを使用すると、Excelファイルをデータベースのように接続し、必要なデータを取得するためにSQLクエリを実行できます。以下はその手順です:

ステップ1:接続を設定する

データを読み取る前に、Excelファイルへの接続を設定する必要があります。接続文字列の書式設定例は以下の通りです:

var fileName = string.Format("{0}\\fileNameHere", Directory.GetCurrentDirectory());
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);
  • fileName:この変数はExcelファイルへのパスを保持します。
  • connectionString:これはプロバイダーとデータソース情報を含むExcelファイルへの接続です。

ステップ2:データを取得する

接続が確立されたので、OleDbDataAdapterを使用して指定されたワークシートからデータを取得できます。ワークシートからすべてのデータを取得するためのコードは以下の通りです:

var adapter = new OleDbDataAdapter("SELECT * FROM [workSheetNameHere$]", connectionString);
var ds = new DataSet();

// 取得したデータでDataSetを埋める
adapter.Fill(ds, "anyNameHere");
DataTable data = ds.Tables["anyNameHere"];
  • workSheetNameHereを読み取るデータが含まれるシートの実際の名前に置き換えてください。

ステップ3:LINQを使用してデータを操作する

DataTable内にデータがあるので、LINQ(言語統合クエリ)を使用してデータを簡単に操作およびクエリできます。特定のフィールドが空でない行をフィルタリングしたい場合、以下のようにできます:

var data = ds.Tables["anyNameHere"].AsEnumerable();

var query = data.Where(x => x.Field<string>("phoneNumber") != string.Empty).Select(x =>
    new MyContact
    {
        firstName = x.Field<string>("First Name"),
        lastName = x.Field<string>("Last Name"),
        phoneNumber = x.Field<string>("Phone Number"),
    });

重要ポイントのまとめ

要約すると、OLE DBプロバイダーを使用してC#でExcelファイルを読み込むことは簡単であり、手動のファイル処理を必要としません。覚えておくべき重要なポイントは次のとおりです:

  • OLE DBプロバイダーを使用して適切な接続文字列を設定する。
  • OleDbDataAdapterを使用してExcelからデータを取得する。
  • 抽出されたデータをフィルタリングおよび操作するためにLINQを活用する。

これらのステップに従うことで、C#アプリケーションでExcelファイルを直接読み取るシームレスな統合を作成できます。

結論

C#でExcelファイルを効率的に読み取ることは、面倒である必要はありません。私たちが説明したアプローチを使用することで、プロセスを自動化し、時間を節約し、アプリケーション開発で本当に重要なことに集中できます。

手動の手順を省いてExcelファイルを読むための知識を身につけたので、ぜひプロジェクトで試してみてください!