C# で Excel を操作する際、行、列、セルをコピーするのは一見簡単そうに思えますが、元の書式を維持するとなると一筋縄ではいかないことがあります。レポート用のデータ整理やプレゼンテーション作成、またはスプレッドシートを見栄えよく整える場合でも、元の見た目を維持することは重要です。本記事では、Spire.XLS for .NET を使用して、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 日間有効な一時ライセンスを取得してください。