C# ClosedXMLでRange.PasteSpecialの値貼り付けを実現する方法

C言語関連

C#でExcel操作を行う際、COM参照ではRange.PasteSpecialメソッドを使って値だけ貼り付けることができます。一方、ClosedXMLではこのメソッドは存在しません。この記事では、ClosedXMLで同様の処理を実現する方法を解説します。

ClosedXMLで値だけを貼り付ける基本

ClosedXMLでは、セルや範囲をコピーする際に値だけをコピーする場合、PasteSpecialの代わりに直接値を設定する方法を用います。

例えば、targetCell.Value = sourceCell.Value;や、範囲単位でtargetRange.Value = sourceRange.Value;とすることで、値のみをコピーできます。

範囲単位でのコピー例

複数セルを含む範囲をコピーする場合、次のようにループを使います。

for(int r = 0; r < sourceRange.RowCount(); r++){ for(int c = 0; c < sourceRange.ColumnCount(); c++){ targetRange.Cell(r+1,c+1).Value = sourceRange.Cell(r+1,c+1).Value; } }

この方法で数式や書式ではなく、値だけを貼り付けることが可能です。

便利な拡張メソッドの利用

頻繁に値だけの貼り付けを行う場合は、拡張メソッドとして定義しておくと便利です。

例えば、sourceRange.CopyValuesTo(targetRange);のようにラップすると、可読性も向上します。

注意点

ClosedXMLではPasteSpecialのような書式やコメントなどもまとめて扱う機能は標準で用意されていません。値だけを貼り付ける場合は、上記のようにValueプロパティを直接操作する方法が最も確実です。

まとめ

ClosedXMLでRange.PasteSpecialの値貼り付けを行う場合、Valueプロパティを利用してセルや範囲に値を直接コピーする方法が基本です。ループや拡張メソッドを活用することで、複数セルへのコピーも簡単に実現できます。

この方法により、COM参照と同様に値のみをExcelに貼り付ける操作がClosedXMLでも可能になります。

コメント

タイトルとURLをコピーしました