0
0

ClosedXML複数行コピー対応

Posted at

ClosedXMLで複数行をコピーする方法について対応したことをまとめたいと思います。

・環境
ClosedXML :バージョン 0.95

目次

 やりたいこと
 解決方法
 まとめ

やりたいこと

やりたいことは複数行を指定した形でのコピーです。
Excelの画像で表すと以下のようなことがしたかったです。
(1-2行を5-6行目にコピペする)

image.png

IXLRowクラスのメソッドにCopyToがあるが、セルの結合が外れた状態で
コピーが実施されるため、コピー先での結合処理が必要となる。

image.png

解決方法

コピー元をセルの範囲(range)で区切ることで疑似的な複数行のコピーを実施する。

C#
//シートの選択 今回はシート名"Sheet1"で検索
IXLWorksheet workSheet = workbook.Worksheets.Where(x => x.Name.Contains("Sheet1")).FirstOrDefault();
//コピー元範囲の選択 今回は[A1:ZZ2]のセル範囲をコピー元とする。
IXLRange fromRange = workSheet.Range("A1:ZZ2");
//コピー先のセルの指定
IXLCell copyToCell = workSheet.Cell("A5");
//コピーの実施
fromRange.CopyTo(copyToCell);

image.png

注意点

コピー元の高さがデフォルトから変更されていても、
コピー先には反映されないため、個別で対応する必要があります。
image.png

高さはクラスのプロパティをコピー元からコピー先へ反映させて対応しました。

C#
//高さの反映
ws.Row("<コピー先行>").Height = ws.Row("<コピー元行>").Height;

まとめ

複数行のコピーをする対応策として、セルの範囲で対応したので、
完全なExcelの操作を再現する対応ではありません。
ClosedXMLの機能の見落とししているかもしれませんので、
別の対応案等ありましたら修正したいと考えています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0