C#でエクセルの読み込みを行える「ExcelDataReader」を紹介します。
無料で利用できる上に高速に処理ができる人気のライブラリです。
エクセルファイルの読み込み専用のライブラリで、エクセルファイルを出力する機能はないので注意してください。
[jin_icon_checkcircle color=”#e9546b” size=”16px”]プログラミングを更に学びたい方必見[jin_icon_checkcircle color=”#e9546b” size=”16px”]
選抜された現役エンジニアから学べるプログラミングスクールで、現場や副業で役に立つノウハウやスキルを習得してみませんか?
オンラインに特化しているので場所に捉われず、自分のライフスタイルに合わせて受講することができます。
副業に興味がある方に人気の「はじめての副業コース」をはじめ、Web開発やシステム開発・アプリ開発などカテゴリ毎に受講ができ、初心者の方でも挫折することなく学ぶことができます。
まずはこの機会に現役のプロに無料相談をしてみましょう。
ExcelDataReaderについて
ExcelDataReaderはエクセルファイルの読み取り専用のライブラリです。このライブラリの特徴としてメモリ消費量が少なく、尚且つ高速に処理ができるのが特徴です。
サポートされているExcelファイルは、旧ファイル形式(*.xls)と新ファイル形式(*.xlsx)の両方です。またCSVファイル形式で保存されているファイルの読み取りも可能です。
ファイルの種類 | ファイル形式 | 読み込み | 書き込み |
Excel 2007以降 (*.xlsx) |
OpenXML | ○ | × |
Excel 2007以降 (*.xlsb) |
OpenXML | ○ | × |
Excel 97-2003 (*.xls) |
バイナリ | ○ | × |
CSVファイル (*.csv) |
CSV(カンマ区切り) | ○ | × |
このライブラリはVisual StudioのNugetパッケージマネージャーからインストールすることができます。
ExcelDataReaderのインストール
まずインストールするプロジェクトファイルをVisual Studioで開きます。
ヘッダーメニューもしくはソリューションエクスプローラーから、NuGetパッケージマネージャーを開きます。NuGetパッケージマネージャーの検索欄に「ExcelDataReader」と入力して検索します。
検索結果の一覧の中に「ExcelDataReader」と「ExcelDataReader.DataSet」があるので、それぞれインストールをします。ExcelDataReaderは基本となるパッケージで、ExcelDataReader.DataSetは拡張パッケージです。
インストールが終われば完了です。
次はインストールしたExcelDataReaderの基本的な操作方法を見てみましょう。
Excelファイルの読み込み
ExcelDataReaderの使い方はReaderメソッドとAsDataSet拡張メソッドの2種類があります。
- Readerメソッド:選択されたシートを1行ごとに読み取り、各セルにアクセスします。(ExcelDataReaderパッケージのインストールが必須)
- AsDataSetメソッド:全シート全セルを読み込んでデータテーブルに格納されます。(ExcelDataReader.DataSetのインストールが必須)
Readerメソッドは選択されたシートの読み込みを行い、AsDataSet拡張メソッドは全シート全セルを読み込みます。
Readerメソッド
Readerメソッドを使ったサンプルを紹介します。
まず読み取りの対象ファイルがExcelDataReaderがサポートしている拡張子であることを確認します。
サポート対象外の拡張子のファイルでリーダーオブジェクトを作成した場合、「ExcelDataReader.Exceptions.HeaderException: ‘Invalid file signature.’
」という例外が発生します。
ExcelReaderFactoryクラスのCreateReaderメソッドで、ファイルの読み込みを行うリーダーオブジェクトを作成します。
またリーダーオブジェクトのオプション設定で、日本語の読み取りに対応させるためにエンコードを「シフトJIS」に変更します。
private void ReaderSample(string filepath, string sheetname)
{
//ファイルの読み取り開始
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
using (FileStream stream = File.Open(filepath, FileMode.Open, FileAccess.Read))
{
IExcelDataReader reader;
//ファイルの拡張子を確認
if (filepath.EndsWith(".xls") || filepath.EndsWith(".xlsx") || filepath.EndsWith(".xlsb"))
{
reader = ExcelReaderFactory.CreateReader(stream, new ExcelReaderConfiguration()
{
//デフォルトのエンコードは西ヨーロッパ言語の為、日本語が文字化けする
//オプション設定でエンコードをシフトJISに変更する
FallbackEncoding = Encoding.GetEncoding("Shift_JIS")
});
}
else if (filepath.EndsWith(".csv"))
{
reader = ExcelReaderFactory.CreateCsvReader(stream, new ExcelReaderConfiguration()
{
//デフォルトのエンコードは西ヨーロッパ言語の為、日本語が文字化けする
//オプション設定でエンコードをシフトJISに変更する
FallbackEncoding = Encoding.GetEncoding("Shift_JIS")
});
}
else
{
MessageBox.Show("サポート対象外の拡張子です。");
return;
}
for (int i = 0; i < reader.ResultsCount; i++)
{
//シート名を指定
if (reader.Name != sheetname)
{
//次のシートへ移動
reader.NextResult();
continue;
}
while (reader.Read())
{
//1行毎に情報を取得
for (int col = 0; col < reader.FieldCount; col++)
{
//セルの入力文字を読み取り
Debug.WriteLine(reader.GetValue(col));
}
}
}
reader.Close();
}
}
AsDataSetメソッド
AsDataSetメソッドを使ったサンプルを紹介します。
リーダーオブジェクトのAsDataSetメソッドを呼び出しすると、Excelファイルの内容が丸ごとDataSetオブジェクトの中に取り込まれます。
Tablesプロパティにシート名を指定することで、シートを切り替えすることができます。指定されたシート名がない場合はnullが返ります。
private void AsDataSetSample(string filepath, string sheetname)
{
//ファイルの読み取り開始
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
using (FileStream stream = File.Open(filepath, FileMode.Open, FileAccess.Read))
{
IExcelDataReader reader;
//ファイルの拡張子を確認
if (filepath.EndsWith(".xls") || filepath.EndsWith(".xlsx") || filepath.EndsWith(".xlsb"))
{
reader = ExcelReaderFactory.CreateReader(stream, new ExcelReaderConfiguration()
{
//デフォルトのエンコードは西ヨーロッパ言語の為、日本語が文字化けする
//オプション設定でエンコードをシフトJISに変更する
FallbackEncoding = Encoding.GetEncoding("Shift_JIS")
});
}
else if (filepath.EndsWith(".csv"))
{
reader = ExcelReaderFactory.CreateCsvReader(stream, new ExcelReaderConfiguration()
{
//デフォルトのエンコードは西ヨーロッパ言語の為、日本語が文字化けする
//オプション設定でエンコードをシフトJISに変更する
FallbackEncoding = Encoding.GetEncoding("Shift_JIS")
});
}
else
{
MessageBox.Show("サポート対象外の拡張子です。");
return;
}
//全シート全セルを読み取り
var dataset = reader.AsDataSet();
//シート名を指定
var worksheet = dataset.Tables[sheetname];
if (worksheet is null)
{
MessageBox.Show("指定されたワークシート名が存在しません。");
}
else
{
//セルの入力文字を読み取り
for (var row = 0; row < worksheet.Rows.Count; row++)
{
for (var col = 0; col < worksheet.Columns.Count; col++)
{
Debug.WriteLine(worksheet.Rows[row][col]);
}
}
}
reader.Close();
}
}
[jin_icon_checkcircle color=”#e9546b” size=”16px”]プログラミングを更に学びたい方必見[jin_icon_checkcircle color=”#e9546b” size=”16px”]
選抜された現役エンジニアから学べるプログラミングスクールで、現場や副業で役に立つノウハウやスキルを習得してみませんか?
オンラインに特化しているので場所に捉われず、自分のライフスタイルに合わせて受講することができます。
副業に興味がある方に人気の「はじめての副業コース」をはじめ、Web開発やシステム開発・アプリ開発などカテゴリ毎に受講ができ、初心者の方でも挫折することなく学ぶことができます。
まずはこの機会に現役のプロに無料相談をしてみましょう。
まとめ
C#で無料で利用可能なエクセル読み出し専用のライブラリ「ExcelDataReader」を紹介しました。
エクセルを扱えるライブラリの中でも、高速で処理ができるメリットがあります。各ライブラリの読み込み処理速度を検証した記事にも記載していますが、その差は一目瞭然です。

この記事が参考になれば幸いです。
以上、最後まで読んでいただきありがとうございました。
コメント