C#とVB.NETでワークシートを複製する

## はじめに
ワークシートのコピー機能は、類似した構造とフォーマットを持つシートを作成するためによく使用されます。これにより、繰り返し入力と書式設定の時間を大幅に削減することもできます。[Free Spire.XLS for .NET](https://www.e-iceblue.com/Introduce/free-xls-component.html)ライブラリは、同じワークブック内のシートのコピーと、異なるワークブック間のシートのコピーをサポートします。具体的なコピー方法とコードは以下を参照してください。

## ツール
* Visual Studio 2022
* [Free Spire.XLS for .NET](https://www.e-iceblue.com/Introduce/free-xls-component.html)

このライブラリは、無料でExcelファイルを作成、編集、変換することができますが、ページ数の制限があります。または、有料版の製品の[無料トライアル](https://www.e-iceblue.com/TemLicense.html)を申し込むこともできます。

**有料版** : [Spire.XLS for .NET](https://www.e-iceblue.com/Introduce/excel-for-net-introduce.html)

## インストール方法
1.[Free Spire.XLS for .NET](https://www.e-iceblue.com/Download/download-excel-for-net-free.html)をダウンロードします。
2.Visual Studioで新しいプロジェクトを作成します。
3.「Solution Explorer」>「References」を右クリックし、「Add Reference」>「Browse」を選択します。
4.BINフォルダ内のdllファイルを見つけて、「OK」をクリックします。

## 同じワークブック内のシートのコピー
* Workbook クラスのインスタンスを初期化します。
* Workbook.LoadFromFile() メソッドを使用して Excel ファイルを読み込みます。
* WorksheetCollection.Add() メソッドを使用して、新しい空白のシートをブックに追加します。
* Worksheet.CopyFrom() メソッドを使用して、元のワークシートを新しいシートにコピーします。
* Workbook.SaveToFile() メソッドを使用して、変更を別のファイルに保存します。
C#:
```c#
using Spire.Xls;

namespace CopyExcelworksheet
{
    class Program
    {
        static void Main(string[] args)
        {
            //サンプルExcelを読み込む
            Workbook workbook = new Workbook();
            workbook.LoadFromFile("sample1.xlsx");

            //ワークシートを追加し、その名前を設定する
            workbook.Worksheets.Add("Sheet1_Copy");

            //ワークシートを新しく追加されたワークシートにコピーする
            workbook.Worksheets[1].CopyFrom(workbook.Worksheets[0]);

            //Excelブックを保存する
            workbook.SaveToFile("Duplicatesheet.xlsx", ExcelVersion.Version2013);
            System.Diagnostics.Process.Start("Duplicatesheet.xlsx");

        }
    }
}
```
VB.NET
```vb
Imports Spire.Xls
 
Namespace CopyExcelworksheet
    Class Program
        Shared  Sub Main(ByVal args() As String)
            'サンプルExcelを読み込む
            Dim workbook As Workbook =  New Workbook() 
            workbook.LoadFromFile("sample1.xlsx")
 
            'ワークシートを追加し、その名前を設定する
            workbook.Worksheets.Add("Sheet1_Copy")
 
            'ワークシートを新しく追加されたワークシートにコピーする
            workbook.Worksheets(1).CopyFrom(workbook.Worksheets(0))
 
            'Excelブックを保存する
            workbook.SaveToFile("Duplicatesheet.xlsx", ExcelVersion.Version2013)
            System.Diagnostics.Process.Start("Duplicatesheet.xlsx")
 
        End Sub
    End Class
End Namespace
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/d53389c0-6e0a-ab61-8d29-d5d5d5904bba.png)
## 異なるワークブック内のシートのコピー
* Workbook クラスのインスタンスを初期化します。
* Workbook.LoadFromFile() メソッドを使用して Excel ファイルを読み込みます。
* 最初のワークシートを入手します。
* 別の Excel サンプルドキュメントを読み込む
* WorksheetCollection.Add() メソッドを使用して、2番目のブックに新しい空白のシートを追加します。
* Worksheet.CopyFrom() メソッドを使用して、元のワークシートを新しいシートにコピーします。
* Workbook.SaveToFile() メソッドを使用して、変更を別のファイルに保存します。
C#:
```c#
using Spire.Xls;

namespace CopyExcelworksheet
{
    class Program
    {
        static void Main(string[] args)
        {
            //サンプルExcelを読み込む、最初のワークシートを取得する
            Workbook workbook = new Workbook();
            workbook.LoadFromFile("sample1.xlsx");
            Worksheet sheet = workbook.Worksheets[0];
            //2番目のExcelブックを読み込む
            Workbook workbook2 = new Workbook();
            workbook2.LoadFromFile("sample2.xlsx");
            //新しいワークシートを追加し、その名前を設定する
            Worksheet targetWorksheet = workbook2.Worksheets.Add("added");
            //元のワークシートを新しく追加されたワークシートにコピーする
            targetWorksheet.CopyFrom(sheet);
            //Excelブックを保存する
            workbook2.SaveToFile("CopySheetBetweenWorkbooks.xlsx", FileFormat.Version2013);
            System.Diagnostics.Process.Start("CopySheetBetweenWorkbooks.xlsx");

        }
    }
}
```
VB.NET
```vb
Imports Spire.Xls
 
Namespace CopyExcelworksheet
    Class Program
        Shared  Sub Main(ByVal args() As String)
            'サンプルExcelを読み込む、最初のワークシートを取得する
            Dim workbook As Workbook =  New Workbook() 
            workbook.LoadFromFile("sample1.xlsx")
            Dim sheet As Worksheet =  workbook.Worksheets(0) 
            '2番目のExcelブックを読み込む
            Dim workbook2 As Workbook =  New Workbook() 
            workbook2.LoadFromFile("sample2.xlsx")
            '新しいワークシートを追加し、その名前を設定する
            Dim targetWorksheet As Worksheet =  workbook2.Worksheets.Add("added") 
            '元のワークシートを新しく追加されたワークシートにコピーする
            targetWorksheet.CopyFrom(sheet)
            'Excelブックを保存する
            workbook2.SaveToFile("CopySheetBetweenWorkbooks.xlsx", FileFormat.Version2013)
            System.Diagnostics.Process.Start("CopySheetBetweenWorkbooks.xlsx")
 
        End Sub
    End Class
End Namespace
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/6a640ee4-9197-2a66-c3ab-19c6f7a40564.png)