FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【ClosedXML】 表の読み取り

 今回はExcelファイルに記載されている表からデータを読み取る方法を説明します。
 表部分のセル範囲を取得してセルに記載されている内容を取得しても良いのですが、ClosedXMLには表データを扱う為のクラスが用意されていますので、そちらを使います。
 以下の表からデータを読み取ります。
Excel_表
using ClosedXML.Excel;
using System;
using System.IO;

namespace ClosedXml17
{
    class Program
    {
        static void Main(string[] args)
        {
            var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Book.xlsx");

            using(var book = new XLWorkbook(filePath, XLEventTracking.Disabled))
            {
                var sheet = book.Worksheet("Sheet1");

                // テーブル作成
                var table = sheet.RangeUsed().AsTable();

                // フィールド名を取得
                Console.WriteLine("フィールド名一覧");
                foreach(var field in table.Fields)
                {
                    Console.WriteLine("Index = {0}, フィールド名 = {1}", field.Index, field.Name);
                }
                Console.WriteLine();

                // 目的のフィールド情報を取得
                Console.WriteLine("目的のフィールド情報を取得する");
                var field0 = table.Field(0);
                var field1 = table.Field("名前");
                Console.WriteLine("field0 = {0}", field0.Name);
                Console.WriteLine("field1 = {0}", field1.Name);
                Console.WriteLine();

                // データを行単位で取得
                Console.WriteLine("データ(行)一覧");
                foreach(var dataRow in table.DataRange.Rows())
                {
                    Console.WriteLine("{0}, {1}, {2}", dataRow.Cell(1).Value, dataRow.Cell(2).Value, dataRow.Cell(3).Value);
                }
                Console.WriteLine();

                // データを列単位で取得
                Console.WriteLine("データ(列)一覧");
                foreach(var dataCol in table.DataRange.Columns())
                {
                    Console.WriteLine("{0}, {1}, {2}", dataCol.Cell(1).Value, dataCol.Cell(2).Value, dataCol.Cell(3).Value);
                }
            }
        }
    }
}
 このコードを実行した結果は以下の通りです。
Table読み取り
 表データを扱う場合、セル範囲からテーブルを作成します。
 1シートに表が1つだけならセル範囲はRangeUsedメソッドで取得できます。
 セル範囲に対してAsTableメソッドを行うことでテーブルを作成できます。
 テーブルではフィールドとデータが分けて管理されていますので、フィールド情報のみ取得したりデータのみ取得したりできます。
 フィールド情報はテーブルのFieldsプロパティに入っています。
 FieldメソッドにIndexかフィールド名を指定することで目的のフィールド情報を取得することもできます。

 データはテーブルのDataRangeプロパティに入っています。
 DataRangeはセル範囲(Range)と同じように扱えますので、ここから行や列を列挙することができます。
 サンプルコードでは行単位と列単位で表のデータを読み取る例を挙げました。

 自分でフィールドとデータ部分を分離する必要がないのでテーブルは地味に便利です。
 表からデータを読み取る場合はテーブルを利用することをお奨めします。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

カレンダー
10 | 2018/11 | 12
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
全記事表示リンク

全ての記事を表示する

カテゴリ
タグリスト

月別アーカイブ
11  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09 
最新記事
リンク
最新コメント
検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。