2022年8月26日金曜日

ExcelDataReaderでCSVを読み込む

どうも。ひっくです。

今回は表題の通り、ExcelDataReaderを使用してCSVデータを読み取る方法について

紹介しようと思います。

→ 関連記事 はこちら  ExcelDataReaderでExcelを高速に読み込む

ExcelDataReaderの使用用途、メリット・デメリット


前回記事 ExcelDataReaderでExcelを高速に読み込む でExcelを読み込む際の使用用途等を記載しています。

CSVの場合もExcelと似た使用用途、メリット・デメリットとなるかと思うので、そちらを参照してください。

 

動作環境と公式GitHubについて


 

実際に使用してみる


今回確認は以下で実施しています。

OS: Windows11

Target Framework: .NetCore3.1

VisualStudio: 2022 Community

 

導入手順は以下の通りです。

  1. NuGetから「ExcelDataReader」「ExcelDataReader.DataSet」をインストールします。

  2. ExcelDataReaderを参照し、読み込み用メソッドを用意しておきます。

    以下サンプルを使用してCSVファイルを読み込むと、DataTable型でCSVのデータを取得することができます。

    Excelの読み込みとあまり変わりないですが、CSVを読み込む際は「CreateCsvReader」を使用するのがポイントです。

    読み込み時のエンコーディング指定やセパレータ指定は「ExcelReaderConfiguration」のプロパティに

    CSV読み込み専用のプロパティが用意されているので、そちらを適宜利用してください。

using ExcelDataReader;
using System;
using System.Data;
using System.IO;
using System.Text;

namespace ExcelDataReaderTest
{
    public class ExcelCsvDataReader
    {
        public DataTable ReadCsvData(string path, bool isUseHeaderRow = false)
        {
            DataTable data = null;

            try
            {
                Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
                using var stream = File.Open(path, FileMode.Open, FileAccess.Read);
                var excelReaderConfig = new ExcelReaderConfiguration();

                // 必要に応じて、各プロパティに対し設定を行う(デフォルトの値で問題ない場合は特に変更しない)
                //excelReaderConfig.AutodetectSeparators = new char[','];
                //excelReaderConfig.FallbackEncoding = Encoding.UTF8;
                //excelReaderConfig.AnalyzeInitialCsvRows = 0;

                using var reader = ExcelReaderFactory.CreateCsvReader(stream, excelReaderConfig);
                var conf = new ExcelDataSetConfiguration
                {
                    ConfigureDataTable = (_) => new ExcelDataTableConfiguration
                    {
                        UseHeaderRow = isUseHeaderRow
                    }
                };

                DataSet ds = reader.AsDataSet(conf);
                data = ds.Tables[0];
            }
            catch (Exception)
            {
                throw;
            }

            return data;
        }
    }
}

 

  • 読み込みCSV(例)

    今回は厚生労働省のオープンデータ(新型コロナウイルス 新規陽性者数の推移(日別))を題材にしてみました。

    変数「ds」をビジュアライザーで開いたのが以下になります。

    呼び出し時に第二引数「isUseHeaderRow」を「true」を設定すると、1行目をヘッダとして読み取ります。

    この時、テーブルの列名には以下のように1行目の項目が設定されます。

     

    1行目をヘッダ扱いしない場合、以下のように1行目の項目もデータとして読み取られます。

まとめ


以上、ExcelDataReaderを使用してCSVを読み込む方法について、まとめました。

CSVの読み込み処理は比較的簡単に実装可能な部類と思いますが、より楽に読み込み処理を用意できるのではないでしょうか。

前回紹介したExcelと合わせて、利用してみてください。

 

今回はこのへんで。ではまた!

0 件のコメント:

コメントを投稿