C# で Excel を DataTable にインポートするか、DataTable を Excel にエクスポートする

Excel は強力なツールですが、大量のデータや複雑なデータロジックを扱う際にはパフォーマンスの制限が生じることがあります。**Excel を DataTable に変換する**ことで、プログラミング言語の機能や様々なデータ処理ライブラリを活用して、より効率的かつ柔軟にデータを処理および分析することができます。
一方で、ソート、フィルタリング、計算などの Microsoft Excel の高度な機能を活用するために、**DataTable を Excel に変換する**必要がある場合もあります。この記事では、無料の.NET ライブラリを使用して、C# でプログラム的に Excel と DataTable の間で変換する方法を紹介します。
* [C#でExcelデータをDataTableにインポートする](#cでexcelデータをdatatableにインポートする)
* [C#でDataTableをExcelにエクスポートする](#cでdatatableをexcelにエクスポートする)

## 無料の.NETライブラリをインストールする
始める前に、[**Free Spire.XLS for .NET**](https://www.e-iceblue.com/Introduce/free-xls-component.html) ライブラリをインストールする必要があります。  このライブラリは、無料でExcelファイルを作成、編集、変換することができますが、ページ数の制限があります。
それをインストールする方法は 2 つあります。
**方法1.** Free Spire.XLS for .NET パッケージをダウンロードし、それを解凍してから、.NET プログラムに dll を手動で参照設定します。

https://www.e-iceblue.com/Download/download-excel-for-net-free.html

**方法2.** Nuget を介して直接無料のライブラリをインストールします。

https://www.nuget.org/packages/FreeSpire.XLS/

## C#でExcelデータをDataTableにインポートする
手順:
1. `LoadFromFile()` メソッドを使用してExcelファイルを読み込みます。
1. `Worksheets[]` プロパティを通じて指定のワークシートを取得します。
1. **`ExportTableOptions`** オブジェクトを作成し、そのプロパティを使ってオプションをカスタマイズします。
1. **`Worksheet.Range[].ExportDataTable()`** メソッドを呼び出して、セル範囲を `DataTable` に変換します。（または、**`Worksheet.ExportDataTable()`** メソッドを使用して、Excelのワークシート全体のデータを直接 `DataTable` オブジェクトにインポートすることもできます。）
1. 結果を出力します。

C#のコード：
```csharp
using Spire.Xls;
using System.Data;

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

            // ワークシートを取得する
            Worksheet sheet = wb.Worksheets[0];

            // ExcelのワークシートをDataTableに変換する
            //DataTable dataTable = sheet.ExportDataTable();

            // 指定されたセル範囲をDataTableに変換する
            ExportTableOptions options = new ExportTableOptions();
            options.ComputedFormulaValue = true;
            options.ExportColumnNames = false;
            options.KeepDataFormat = false;
            options.RenameStrategy = RenameStrategy.Letter;
            DataTable dataTable = sheet.Range[5, 1, 7, 6].ExportDataTable(options);

            // DataTableの列名を出力する
            for (int i = 0; i < dataTable.Columns.Count; i++)
            {
                Console.Write(dataTable.Columns[i].ColumnName + "\t");
            }
            Console.WriteLine();

            // DataTable のデータ行を出力する
            foreach (DataRow row in dataTable.Rows)
            {
                foreach (var item in row.ItemArray)
                {
                    Console.Write(item + "\t");
                }
                Console.WriteLine();
            }
        }
    }
}
```


## C#でDataTableをExcelにエクスポートする
手順:
1. DataTable のデータを定義します。
1. Excel ワークブックを作成し、ワークシートを追加します。
1. **`InsertDataTable()`** メソッドを使用して、DataTable のデータを Excel のワークシートに書き込みます。
1. `SaveToFile()` メソッドを使用して、Excel ファイルを保存します。


C#のコード：
```csharp
using Spire.Xls;
using System.Data;

namespace DataTableToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // データセットを定義する
            string[,] data = new string[,]
            {
                {"SKU", "説明", "Price ($)"},
                {"11060015", "品目 1", "2000"},
                {"11060037", "品目 2", "1500"},
                {"11060021", "品目 3", "3980"},
                {"11060029", "品目 4", "1190"},
            };

            // DataTableオブジェクトを作成する
            DataTable dataTable = new DataTable();

            // 列の数を取得する
            int columnCount = data.GetLength(1);

            // DataTable に列を追加する
            for (int col = 0; col < columnCount; col++)
            {
                dataTable.Columns.Add(data[0, col]);
            }

            // DataTableに行を追加する
            for (int row = 1; row < data.GetLength(0); row++)
            {
                DataRow dataRow = dataTable.NewRow();
                for (int col = 0; col < columnCount; col++)
                {
                    dataRow[col] = data[row, col];
                }
                dataTable.Rows.Add(dataRow);
            }

            // Workbookオブジェクトを作成する
            Workbook workbook = new Workbook();

            // 新しいワークシートを追加する
            Worksheet sheet = workbook.Worksheets.Add("SalesReport");

            // DataTableのデータをワークシートにインポートする
            sheet.InsertDataTable(dataTable, true, 1, 1);

            // 列幅を自動調整する
            for (int i = 1; i <= sheet.AllocatedRange.ColumnCount; i++)
            {
                sheet.AutoFitColumn(i);
            }

            // ファイルを保存する
            workbook.SaveToFile("DataTableToExcel.xlsx", FileFormat.Version2016);
            workbook.Dispose();
        }
    }
}
```

もし何か質問があれば、フォーラムに投稿することができます。

https://www.e-iceblue.com/forum/spire-xls-f4.html