C#

【C#】Excel ファイルの読み込みなら ExcelDataReader がおすすめ

C#でエクセルの読み込みを行える「ExcelDataReader」を紹介します。

無料で利用できる上に高速に処理ができる人気のライブラリです。

エクセルファイルの読み込み専用のライブラリで、エクセルファイルを出力する機能はないので注意してください。

プログラミングを更に学びたい方必見

選抜された現役エンジニアから学べるプログラミングスクールで、現場や副業で役に立つノウハウやスキルを習得してみませんか?

オンラインに特化しているので場所に捉われず、自分のライフスタイルに合わせて受講することができます。

副業に興味がある方に人気の「はじめての副業コース」をはじめ、Web開発やシステム開発・アプリ開発などカテゴリ毎に受講ができ、初心者の方でも挫折することなく学ぶことができます。

まずはこの機会に現役のプロに無料相談をしてみましょう。

\ プログラミングスクールの詳細を確認する /

ExcelDataReaderについて

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」に変更します。

Readメソッドで1行ずつ読み込みを行うことができます。セルの値はGetValueメソッドで取得することができます。
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が返ります。

DataSetのデータはfor文のループで、セルからデータを読み取ることができます。
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();
    }
}

 

プログラミングを更に学びたい方必見

選抜された現役エンジニアから学べるプログラミングスクールで、現場や副業で役に立つノウハウやスキルを習得してみませんか?

オンラインに特化しているので場所に捉われず、自分のライフスタイルに合わせて受講することができます。

副業に興味がある方に人気の「はじめての副業コース」をはじめ、Web開発やシステム開発・アプリ開発などカテゴリ毎に受講ができ、初心者の方でも挫折することなく学ぶことができます。

まずはこの機会に現役のプロに無料相談をしてみましょう。

\ プログラミングスクールの詳細を確認する /

まとめ

C#で無料で利用可能なエクセル読み出し専用のライブラリ「ExcelDataReader」を紹介しました。

エクセルを扱えるライブラリの中でも、高速で処理ができるメリットがあります。各ライブラリの読み込み処理速度を検証した記事にも記載していますが、その差は一目瞭然です。

【C#】エクセルの読み込み速度比較 ~高速でおすすめのライブラリとは~C#でエクセルを高速で読み取りできるライブラリについて検証した結果をまとまめました。Excelを操作できる代表的なライブラリであるNPOIやClosedXML、SpreadsheetLight、ExcelDataReader、EPPlusを比較しています。...

この記事が参考になれば幸いです。

以上、最後まで読んでいただきありがとうございました。

プログラミングを学習したいなら…

プログラミングスキルを身に付けるなら、プログラミングを効率良く学べる
プログラミングスクール」がオススメです。

特にこんな方にオススメ!!
これからエンジニアを目指したい
プログラミングの専門性を高めたい
プログラミングを学んで副業をしたい
エンジニアに転職して年収をアップさせたい

プログラミングを触ったことがない未経験からでも、プログラミングスクールで学習すれば、エンジニアへ就職・転職することも可能です。

あなたの「行動力」と「やる気」で、あなたの人生を大きく変えるチャンスになることでしょう。

プログラミングスクールに興味がある方は是非チェックしてみてください。

> プログラミングを学ぶ <

COMMENT

メールアドレスが公開されることはありません。

CAPTCHA