【ClosedXML】 ワークシートの作成、取得

 ClosedXMLでExcelファイルの操作を行う場合は、Bookを作成(又は読み込み)した後に、ワークシートを作成したり、目的のワークシートを取得する必要があります。
 まずはワークシートの作成方法について説明します。
using ClosedXML.Excel;
using System;

namespace ClosedXml03
{
    class Program
    {
        static void Main(string[] args)
        {
            using(var book = new XLWorkbook(XLEventTracking.Disabled))
            {
                // ワークシートを作成
                var sheet1 = book.AddWorksheet("シート1");
                var sheet2 = book.Worksheets.Add("シート2");   // こっちでもOK
                var sheet0 = book.AddWorksheet("シート0", 1);  // シート0を最初のシートとして作成
                
                // 既に存在するシート名を追加すると例外発生
                //var sheet3 = book.Worksheets.Add("シート2");
            }
        }
    }
}
 ワークシートの作成方法は2種類あり、どちらを使ってもかまいません。
 1つはXLWorkbookインスタンスのAddWorksheetメソッドを使用する方法です。
 もう1つはXLWorkbookインスタンスのWorksheetsプロパティのAddメソッドを使用する方法です。
 どちらのメソッドも引数にワークシートの名前を指定し、戻り値に作成したワークシートのインスタンスを返します。
 既存ワークシートと同名のワークシートを作ろうとすると例外が発生しますので、注意してください。
 これらのワークシート作成メソッドにシート名だけを指定した場合は、新規ワークシートはWorksheetsの最後に追加されます。
 ワークシート作成メソッドの第2引数に新規ワークシートの位置を指定することで、新規ワークシートを任意の位置に作成することができます。

 次に、ワークシートを取得する方法について説明します。
using ClosedXML.Excel;
using System;

namespace ClosedXml03
{
    class Program
    {
        static void Main(string[] args)
        {
            using(var book = new XLWorkbook(XLEventTracking.Disabled))
            {
                 // ワークシートを取得する
                var sheet1 = book.Worksheet(1);  // positionは1から開始
                Console.WriteLine(sheet1.Name);  // シート1

                var sheet2 = book.Worksheet("シート2");
                Console.WriteLine(sheet2.Name);  // シート2

                IXLWorksheet sheet3;
                if(book.TryGetWorksheet("シート3", out sheet3))
                {
                    Console.WriteLine(sheet3.Name);
                }
                else
                {
                    Console.WriteLine("ワークシートを取得できませんでした。");
                }
            }
        }
    }
}
 ワークシートを取得する場合はXLWorkbookインスタンスのWorksheetメソッドを使用します。
 Worksheetメソッドの引数には、ワークシート番号(1から開始)かワークシート名を指定します。
 Worksheetメソッドに存在しないシート番号やシート名を指定すると例外が発生します。
 例外処理が面倒な場合はTryGetWorksheetメソッドを使用する方法もあります。
 TryGetWorksheetメソッドでは戻り値でワークシートの取得が成功したかどうかを判断できます。

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

【ClosedXML】 Excelブックの作成、読み込み

 ClosedXMLでExcelファイルを扱う為には、まず最初にXLWorkbookインスタンスを作成する必要があります。
 Excelファイルを新たに作成したい場合は以下の様にします。
using(var book = new XLWorkbook())
{
    // エクセルファイルに書き込み

    book.SaveAs(path);
}
 コンストラクタでExcelファイルのPathを指定しない場合は空のブックが作成されます。
 あとはそのブックにシートを追加し、セルに値を入力する等していきます。
 最後にSaveAsメソッドでExcelファイルを保存します。

 既存のExcelブックを読み込みたい場合は以下の様にします。
using(var book = new XLWorkbook(path))
{
    // エクセルファイルの読み込み、編集

    book.Save();
}
 XLWorkbookのコンストラクタで読み込みたいExcelファイルのPathを指定します。
 このときExcelファイルを開いている場合はファイルがロックされていて読み込めないため例外が発生しますので、注意してください。
 後は、ワークシートやセルから情報を読み取るだけです。
 もちろん、読み込んだExcelブックを編集することもできます。
 編集した場合は最後にSaveメソッドを実行し、編集内容を保存してください。
 新たにExcelファイルを作成する場合も、Excelファイルを読み込む場合でも、XLWorkbookインスタンスは最後にDisposeする必要があります。

 以下は単純なExcelブック操作のサンプルコードです。
using ClosedXML.Excel;
using System;
using System.IO;

namespace ClosedXml02
{
    class Program
    {
        static void Main(string[] args)
        {
            var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "ブック.xlsx");

            // Excelファイル作成
            using (var book = new XLWorkbook(XLEventTracking.Disabled))
            {
                var sheet = book.AddWorksheet("しーと");
                sheet.Cell("A1").Value = "値";

                book.SaveAs(path);
            }
                    
            // Excelファイルを読み込み
            using(var book = new XLWorkbook(path, XLEventTracking.Disabled))
            {
                var sheet = book.Worksheet("しーと");
                sheet.Cell("A1").Value = "Value";

                book.Save();
            }
        }
    }
}
 このサンプルではExcelファイルを作成した後に、そのファイルを開きA1セルの値を変更しています。
 (シートやセルの操作については次回以降に説明するので省略します)
 このサンプルでは、XLWorkbookのコンストラクタでXLEventTracking.Disabledを指定しています。こうすることで、行や列等の追加・削除に伴う追跡を行わないようにできます。
 ClosedXMLではシートや列、行等の追加や削除を追跡しています。そのため、巨大なExcelファイルを扱う場合には追跡イベントが大量に発生するためパフォーマンスが悪化します。
 また、巨大なExceファイルを使用する場合は列や行等を扱う場合に逐一Disposeすることが推奨されています。
 Excelファイルを新たに作成したり、ファイルから情報を読み取ったりするだけならこういった追跡は必要ありません。(ほとんどの場合で必要ないと思われます。)
 そんな場合は追跡機能をOFFにすることでパフォーマンスを改善できます。また、ループの際に一々Disposeする必要もなくなります。(XLWorkbookのDisposeは必要です)
 

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

ClosedXMLの紹介

 C#でExcelファイルを扱う方法はいくつかありますが、ここではClosedXMLを使ってみたいと思います。
 ClosedXMLを選んだ理由ですが、
1)COMは面倒くさいので使いたくない。
2)ExcelがインストールされていないPCでも使用できる。
3)Excelのマクロをかじったことがある人なら書式設定等が直感的でわかりやすい。
の3点です。
 ClosedXMLはOpenXML SDKを使っています。そのため、ClosedXMLで操作可能なExcelファイルは拡張子が.xlsxのファイルだけです。Excel97-2003形式(.xlsのファイル)は使用できません。
 ClosedXMLはNuGetからインストールできます。(OpenXML SDKも一緒にインストールしてくれるようです)
NuGet ClosedXML

 今回はClosedXMLでのExcel操作がどんな感じなのかを見てもらうために簡単なExcelファイルを作成してみます。
using ClosedXML.Excel;
using System;
using System.IO;

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

            using(var book = new XLWorkbook())
            {
                var worksheet = book.AddWorksheet("シート1");
                var cell = worksheet.Cell("B2");
                cell.Value = "Hello World!";
                cell.Style.Font.FontSize = 24;
                cell.Style.Font.FontColor = XLColor.Red;
                cell.Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
                worksheet.Column(2).AdjustToContents();

                book.SaveAs(filePath);
            }
        }
    }
}
 このプログラムを実行すると以下の様なExcelファイルが作成されます。
ClosedXMLデモ結果
 次回からClosedXMLを使用したExcelファイル操作について説明していきたいと思います。
   

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

カレンダー
07 | 2017/08 | 09
- - 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 31 - -
全記事表示リンク

全ての記事を表示する

カテゴリ
タグリスト

月別アーカイブ
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