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 を DataTable にインポートするか、DataTable を Excel にエクスポートする

Posted at

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

無料の.NETライブラリをインストールする

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

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

C#でExcelデータをDataTableにインポートする

手順:

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

C#のコード:

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 のデータを定義します。
  2. Excel ワークブックを作成し、ワークシートを追加します。
  3. InsertDataTable() メソッドを使用して、DataTable のデータを Excel のワークシートに書き込みます。
  4. SaveToFile() メソッドを使用して、Excel ファイルを保存します。

C#のコード:

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();
        }
    }
}

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

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?