C# で Excel を操作する際、行、列、セルをコピーするのは一見簡単そうに思えますが、元の書式を維持するとなると一筋縄ではいかないことがあります。レポート用のデータ整理やプレゼンテーション作成、またはスプレッドシートを見栄えよく整える場合でも、元の見た目を維持することは重要です。本記事では、Spire.XLS for .NET を使用して、C# で Excel の行、列、セルを元の書式を保持したままコピーする方法を解説します。 C# で Excel の行を書式付きでコピーする C# で Excel の列を書式付きでコピーする C# で Excel のセルを書式付きでコピーする Spire.XLS for .NET をインストールします まず、Spire.XLS for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。 PM> Install-Package Spire.XLS C# で Excel の行を書式付きでコピーする Excel で行をコピーする際に書式を維持するには、Worksheet.CopyRow(CellRange sourceRow, Worksheet destSheet, int destRowIndex, CopyRangeOptions copyOptions) メソッドを使用すると効率的です。このメソッドを使用すると、同じワークシート内または異なるワークシート間で行を正確にコピーできます。また、CopyRangeOptions パラメーターを使用して、すべての書式、条件付き書式、データ検証、スタイル、または数式の値のみをコピーするなど、コピー動作を制御することも可能です。 以下は、Spire.XLS を使用して異なるワークシート間で書式付きで行をコピーする手順です。 Workbook クラスのオブジェクトを作成します。 Workbook.LoadFromFile() メソッドを使用して Excel ファイルを読み込みます。 Workbook.Worksheets[index] プロパティを使用して、ソースと宛先のワークシートを取得します。 Worksheet.Rows[index] プロパティを使用してコピーしたい行を取得します。 Worksheet.CopyRow(CellRange sourceRow, Worksheet destSheet, int destRowIndex, CopyRangeOptions copyOptions) メソッドを使用して、ソースワークシートから宛先ワークシートに行とその書式をコピーします。 ソース行のセル幅を宛先行の対応するセルにコピーします。 Workbook.SaveToFile() メソッドを使用してブックをファイルに保存します。 C# using Spire.Xls; namespace CopyRows { internal class Program { static void Main(string[] args) { // Workbookオブジェクトを作成します Workbook workbook = new Workbook(); // Excelファイルを読み込みます workbook.LoadFromFile("Sample.xlsx"); // ソースワークシートを取得します Worksheet sheet1 = workbook.Worksheets[0]; // 新しいワークシートを作成します Worksheet sheet2 = workbook.Worksheets.Add("Sheet2"); // コピーしたい行を取得します CellRange row = sheet1.Rows[0]; // ソースワークシートの行を宛先ワークシートの1行目にコピーします sheet1.CopyRow(row, sheet2, 1, CopyRangeOptions.All); int columns = sheet1.Columns.Length; // ソース行内のセルの列幅を宛先行内の対応するセルにコピーします for (int i = 0; i < columns; i++) { double columnWidth = row.Columns[i].ColumnWidth; sheet2.Rows[0].Columns[i].ColumnWidth = columnWidth; } // ワークブックをファイルに保存します workbook.SaveToFile("output/行のコピー.xlsx"); workbook.Dispose(); } } } C# で Excel の列を書式付きでコピーする 同様に、列を書式付きでコピーするには、Worksheet.CopyColumn(CellRange sourceColumn, Worksheet destSheet, int destColIndex, CopyRangeOptions copyOptions) メソッドを使用できます。詳細な手順は以下の通りです。 Workbook クラスのオブジェクトを作成します。 Workbook.LoadFromFile() メソッドを使用して Excel ファイルを読み込みます。 Workbook.Worksheets[index] プロパティを使用して、ソースと宛先のワークシートを取得します。 Worksheet.Columns[index] プロパティを使用してコピーしたい列を取得します。 Worksheet.CopyColumn(CellRange sourceColumn, Worksheet destSheet, int destColIndex, CopyRangeOptions copyOptions) メソッドを使用して、ソースワークシートから宛先ワークシートに列とその書式をコピーします。 ソース列のセルの行の高さを宛先列の対応するセルにコピーします。 Workbook.SaveToFile() メソッドを使用してブックをファイルに保存します。 C# using Spire.Xls; namespace CopyColumns { internal class Program { static void Main(string[] args) { // Workbookオブジェクトを作成します Workbook workbook = new Workbook(); // Excelファイルを読み込みます workbook.LoadFromFile("Sample.xlsx"); // ソースワークシートを取得します Worksheet sheet1 = workbook.Worksheets[0]; // 宛先ワークシートを取得します Worksheet sheet2 = workbook.Worksheets.Add("Sheet2"); // コピーしたい列を取得します CellRange column = sheet1.Columns[0]; // ソースワークシートの列を宛先ワークシートの1列目にコピーします sheet1.CopyColumn(column, sheet2, 1, CopyRangeOptions.All); int rows = column.Rows.Length; // ソース列内のセルの行高さを宛先列内の対応するセルにコピーします for (int i = 0; i < rows; i++) { double rowHeight = column.Rows[i].RowHeight; sheet2.Columns[0].Rows[i].RowHeight = rowHeight; } // ワークブックをファイルに保存します workbook.SaveToFile("output/列のコピー.xlsx", ExcelVersion.Version2016); workbook.Dispose(); } } } C# で Excel のセルを書式付きでコピーする 行や列のコピーに加え、Spire.XLS for .NETを使用すると、CellRange.Copy(CellRange destRange, CopyRangeOptions copyOptions) メソッドを利用してセル範囲を書式付きでコピーすることも可能です。手順は以下の通りです。 Workbook クラスのオブジェクトを作成します。 Workbook.LoadFromFile() メソッドを使用して Excel ファイルを読み込みます。 Workbook.Worksheets[index] プロパティを使用して、ソースと宛先のワークシートを取得します。 Worksheet.Range[] プロパティを使用して、ソースと宛先のセル範囲を取得します。 CellRange.Copy(CellRange destRange, CopyRangeOptions copyOptions) メソッドを使用して、ソースワークシートのセル範囲とその書式を宛先セル範囲にコピーします。 ソースセル範囲の行の高さと列の幅を宛先セル範囲にコピーします。 Workbook.SaveToFile() メソッドを使用してブックをファイルに保存します。 C# using Spire.Xls; namespace CopyCells { internal class Program { static void Main(string[] args) { // Workbookオブジェクトを作成します Workbook workbook = new Workbook(); // Excelファイルを読み込みます workbook.LoadFromFile("Sample.xlsx"); // ソースワークシートを取得します Worksheet sheet1 = workbook.Worksheets[0]; // 宛先ワークシートを取得します Worksheet sheet2 = workbook.Worksheets.Add("Sheet2"); // ソースセル範囲を取得します CellRange range1 = sheet1.Range["A1:D6"]; // 宛先セル範囲を取得します CellRange range2 = sheet2.Range["A1:D6"]; // ソースワークシートのセル範囲を宛先ワークシートのセル範囲にコピーします range1.Copy(range2, CopyRangeOptions.All); // ソースセル範囲の行高さと列幅を宛先セル範囲にコピーします for (int i = 0; i < range1.Rows.Length; i++) { CellRange row = range1.Rows[i]; for (int j = 0; j < row.Columns.Length; j++) { CellRange column = row.Columns[j]; range2.Rows[i].Columns[j].ColumnWidth = column.ColumnWidth; range2.Rows[i].RowHeight = row.RowHeight; } } // ワークブックをファイルに保存します workbook.SaveToFile("output/セルのコピー.xlsx", ExcelVersion.Version2016); workbook.Dispose(); } } } 一時ライセンスを申請する 結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。 にお問い合わせ、30 日間有効な一時ライセンスを取得してください。