ClosedXML でセルの結合 (マージ) を行う方法

ここでは ClosedXML ライブラリを利用して、Excel セルの結合 (マージ) を行う方法を紹介します。

ClosedXML のインストールについては、「ClosedXML のインストール」をみてください。

さて、具体例で説明します。次のような Excel ファイルがあって、この A1 から D1 までの 4 つのセルをマージすることを考えます。

マージを行うにはセルの範囲を指定して、Merge メソッドを呼ぶだけです。 今回はセル A1 から D1 までの範囲なので、セルの範囲は "A1:D1" で指定できます。

using System.Linq;
using ClosedXML.Excel;

namespace ClosedXMLTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var workbook = new XLWorkbook(@"C:\Temp\test_merge.xlsx");
            var worksheet = (from w in workbook.Worksheets
                             where w.Name.Equals("Sheet1")
                             select w).First();

            worksheet.Range("A1:D1").Merge();            
            workbook.Save();
        }
    }
}

この実行結果は次のようになります。

ちなみに、上記コード内で Workbook の Worksheets コレクションから、LINQ を用いて名前が "Sheet1" であるワークシートを抽出しています。 LINQ については「LINQ シンタックス - 拡張メソッドとクエリ表現」などをみてください。

セルの結合解除 (アンマージ)

結合はマージ (merge) といい、結合の解除はアンマージ (unmerge) といいます。プログラムのメソッド名もその名の通り、結合解除する時は Unmerge メソッドを呼びます。

上記のコードで結合したセルを結合解除するには、Merge の部分を Unmerge に変えるだけです。

    ...
    worksheet.Range("A1:D1").Unmerge();
    ...

その結果は次の通りです。

ちなみに、面白いことに ClosedXML で結合した箇所については、結合解除すると結合前の内容が復活しました (注:ClosedXML 0.86 で動作確認)。

Excel でファイルを操作してセルを結合した場合は、左上のセルの内容だけが残り、その他のセルの内容が消えます。 しかし、ClosedXML ライブラリでは必ずしもマージして見えなくなったセルの内容は消去されるわけではないようです。もし Excel と同等の動作を実現したい場合は、 残りのセルの値を消去する動作を追加するべきでしょう。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 C# 入門