C#/VB.NET ワークシートをコピーする方法

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

## Free Spire.XLS for .NETをインストールする
**方法1**：[NuGet](https://www.nuget.org/packages/FreeSpire.XLS)でFree Spire.XLS for .NETをインストールする
Visual Studioを開いて新しいプロジェクトを作成します。次に、「Solution Explorer」で「References」を右クリックし、「Nuget Manage Packages」を選択します。Free Spire.XLS for .NETを検索してインストールします。
**方法2**：手動でSpire.xls.dllを追加する
[Free Spire.XLS for .NET](https://jp.e-iceblue.com/download/free-spire-excel-for-net.html)をローカルにダウンロードしインストールします。次に、Visual Studioて新しいプロジェクトを作成し、右側の「Solution Explorer」で「References」を右クリックし、「Add Reference」>「Browse」を選択して、インストールパス下の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/ce064227-942b-a44f-3437-1ad8d99dbe7d.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/8b81de0f-c21b-b2fe-1cee-0f1baa104320.png)