読者です 読者をやめる 読者になる 読者になる

ClosedXMLつこうて感想メモ

①Row().Deleteする際はRow内各セルに関連する結合をすべて解除する

 

private static void RemoveMergedRangeInRow(IXLWorksheet sheet, int row)
{
    for (int j = 1; j <= sheet.LastColumnUsed().ColumnNumber(); j++)
    {
        var vvv = GetMergedRange(sheet, row, j);
        if (vvv != null)
        {
            sheet.MergedRanges.Remove(vvv);
        }
    }
}

private static IXLRange GetMergedRange(IXLWorksheet sheet, int row, int col)
{
    foreach (var ml in sheet.MergedRanges)
    {
        if (IsInRange(row, col, ml))
        {
            return ml;
        }
    }

    return null;
}

private static bool IsInRange(int row, int col, IXLRange ml)
{
    var ad = ml.RangeAddress;

    var r1 = ad.FirstAddress;
    var r2 = ad.LastAddress;

    var aaa1 = r1.RowNumber;
    var aaa2 = r2.RowNumber;

    var bbb1 = r1.ColumnNumber;
    var bbb2 = r2.ColumnNumber;

    return bbb1 <= col && col <= bbb2 && aaa1 <= row && row <= aaa2;
}

 

②Rows().Deleteメソッドが欲しいなぁ。

 上記①めんどくさいし。結合セル丸ごと含む行を一気に削除できれば楽。