0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C# で Excel ワークシートをコピーする方法

Posted at

日常の .NET 開発において、Excel ファイルの操作は頻繁に発生します。例えばデータの読み込み、書き込み、修正、またはワークシートのコピーなどが挙げられます。Free Spire.XLS for .NET は機能豊富な無料クラスライブラリで、ワークシートのコピーを含む多様な Excel 操作をサポートしています。本稿では、このライブラリを活用して「同一ワークブック内」または「異なるワークブック間」でワークシートをコピーする具体的な方法を詳しく解説します。


1. 環境準備

NuGet を通じて Free Spire.XLS をインストールします。

Install-Package FreeSpire.XLS

注意: 無料版にはページ数の上限が設定されているため、個人利用や小規模プロジェクトに適しています。


2. コア機能

Free Spire.XLS は Worksheet.CopyFrom() メソッドを提供しており、以下の2種類のワークシートコピーを簡便に実現できます。

  • 同一ワークブック内でのコピー
  • 異なるワークブック間でのコピー

3. サンプルコード

3.1 同一ワークブック内でワークシートをコピー

using Spire.Xls;

namespace CopyExcelWorksheet
{
    class Program
    {
        static void Main(string[] args)
        {
            // Excel ファイルを読み込み
            Workbook workbook = new Workbook();
            workbook.LoadFromFile("Sample.xlsx");

            // 同一ワークブック内に新しいワークシートを追加
            workbook.Worksheets.Add("Sheet1_Copy");
         
            // 指定したワークシートの内容を新しいワークシートにコピー
            workbook.Worksheets[1].CopyFrom(workbook.Worksheets[0]);
          
            // 結果ファイルを保存
            workbook.SaveToFile("ワークシート複製.xlsx", ExcelVersion.Version2016);
        }
    }
}

✅ メリット:ファイル名の変更は不要で、元のワークシートの書式とデータがそのまま保持されます。

3.2 異なるワークブック間でワークシートをコピー

using Spire.Xls;

namespace CopyExcelWorksheet
{
    class Program
    {
        static void Main(string[] args)
        {
            // ソース Excel ファイルを読み込み
            Workbook srcWorkbook = new Workbook();
            srcWorkbook.LoadFromFile("Sample.xlsx");
            // ソースワークブックから1番目のワークシートを取得
            Worksheet srcSheet = srcWorkbook.Worksheets[0];
            
            // ターゲット Excel ファイルを読み込み
            Workbook targetWorkbook = new Workbook();
            targetWorkbook.LoadFromFile("New.xlsx");
            // ターゲットワークブック内に新しいワークシートを追加
            Worksheet targetSheet = targetWorkbook.Worksheets.Add("テンプレート");
            
            // ソースワークシートの内容をターゲットワークシートにコピー
            targetSheet.CopyFrom(srcSheet);
            
            // ターゲットファイルを保存
            targetWorkbook.SaveToFile("異ファイル間複製.xlsx", FileFormat.Version2013);
        }
    }
}

💡 適用シーン:ワークブックAのテンプレートをワークブックBにコピーし、迅速に新しいExcelファイルを生成するケースに最適です。

バッチ処理例:複数のワークシートを一括コピー

string[] sheetNames = { "Sheet1", "Sheet2", "Sheet3" };
foreach (string name in sheetNames)
{
    Worksheet srcSheet = workbook.Worksheets[name];
    Worksheet newSheet = workbook.Worksheets.Add($"Copy_{name}");
    newSheet.CopyFrom(srcSheet);
}

🚀 効率向上ポイント:一括処理で複数のワークシートを同時にコピーでき、重複するコードを大幅に削減できます。


4. ベストプラクティスの推奨

  • 書式とスタイルの保持: CopyFrom() メソッドは、フォント、罫線、セルの背景色などのスタイル情報を自動的に保持するため、手動で調整する手間が省けます。
  • メモリリークの防止: Excel 操作が完了した後は、必ず workbook.Close() メソッドを呼び出すか、using 文などを活用してリソースを適切に解放してください。
  • エラーハンドリングの強化: ファイル読み込み・保存などの重要な処理は、try-catch ブロックで囲み、ファイル不存在やアクセス権限エラーなどに対応すると安定性が向上します。

オフィス自動化が急速に進む現在、ワークシートのコピーは単なる基本操作ではなく、開発効率を引き上げるコアスキルの一つです。本稿で紹介した無料 .NET Excel ライブラリを使用すると、開発者は C# 環境で Office をインストールすることなく、ファイル間・ワークシート間の高效なコピーを実現できます。コードが簡潔であり、動作も安定しているため、業務系システムの開発にも安心して活用できます。

リソース:

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?