none
【ClosedXML】結合されたセルの行数、列数を取得したい RRS feed

  • 質問

  • ClosedXMLを使用してxlsxファイル内の結合されたセルの行数、列数を取得しようとしています。

    例えば、以下のような結合セルがあるとします。

    ・A1~A10で結合したセル

    ・B1~B4で結合したセル

    ・B5~B9で結合したセル

    ・B10のみのセル

    このときA1を指定したときに結合されたセルの行数:10という情報を取りたいのですが、そのような関数はあるでしょうか。

    VBAではMergeArea.Rows.Count、Columns.Countというような関数がありましたが、同様の機能を持つ関数を探しています。

    そのような関数がない場合、結合されたセルのなかで左上のセルにのみ値があるという前提ですが、

    A1から順に下にセルを読んでいって「結合されている(IsMerged)かつ空である(IsEmpty)」という条件で

    結合された行数を数える関数を作るのが妥当でしょうか。

    2018年4月16日 10:01

回答

  • こんな

    static void Main(string[] args)
    {
        var book = new ClosedXML.Excel.XLWorkbook("Book1.xlsx");
        var sheet=book.Worksheets.First();
        foreach (string adr in new string[] { "A1", "B1", "B5", "B10" })
        {
            var range = sheet.Range(adr);
            if (range.IsMerged())
            {
                var m = sheet.MergedRanges.Where(_ => _.Intersects(range)).FirstOrDefault();
                Console.WriteLine(m.ToString()  +"\t"+ m.ColumnCount() + "," + m.RowCount());
            }
            else
            {
                Console.WriteLine(range.ToString() +"\t1,1");
            }
        }
    }

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク RagWork 2018年4月17日 1:25
    2018年4月16日 11:42

すべての返信

  • こんな

    static void Main(string[] args)
    {
        var book = new ClosedXML.Excel.XLWorkbook("Book1.xlsx");
        var sheet=book.Worksheets.First();
        foreach (string adr in new string[] { "A1", "B1", "B5", "B10" })
        {
            var range = sheet.Range(adr);
            if (range.IsMerged())
            {
                var m = sheet.MergedRanges.Where(_ => _.Intersects(range)).FirstOrDefault();
                Console.WriteLine(m.ToString()  +"\t"+ m.ColumnCount() + "," + m.RowCount());
            }
            else
            {
                Console.WriteLine(range.ToString() +"\t1,1");
            }
        }
    }

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク RagWork 2018年4月17日 1:25
    2018年4月16日 11:42
  • ありがとうございます。

    いただいたコードを関数にして使わせていただきます。

    2018年4月17日 1:27