1
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?

.NETでC#を使ってExcelとDataTableのデータを相互変換

Last updated at Posted at 2024-11-08

.NETフレームワークでは、C#を使ってExcelデータとDataTableの間でデータを変換することは、データ分析、レポート生成、データ移行などにおいて非常に一般的なニーズです。このプロセスでは、ExcelファイルからDataTableにデータを読み込み、.NETが提供する豊富なデータ処理機能を活用できるようにすること、またDataTableのデータをExcelにエクスポートしてデータの視覚化や共有を可能にすることが含まれます。この記事では、C#でExcelデータとDataTable間の効率的な変換方法を紹介します。

ここで紹介する方法では、無料のFree Spire.XLS for .NETを使用します。NuGetコマンドは次の通りです:PM> Install-Package FreeSpire.XLS

ExcelファイルからDataTableへデータを書き出す

ライブラリのExportDataTableメソッドを使用すると、指定したExcelワークシートまたはワークシート内の特定のセル範囲のデータを簡単にDataTableオブジェクトにインポートできます。特定のセル範囲をDataTableにエクスポートする際、ExportTableOptionsオブジェクトを引数として使用してエクスポートオプションを設定することも可能です。例えば、数式の計算結果をエクスポートするかどうか、列名をエクスポートするかどうかを指定できます。以下は操作手順の例です:

  1. 必要なモジュールをインポートします。
  2. Workbookオブジェクトを作成し、Workbook.LoadFromFile()メソッドでExcelファイルを読み込みます。
  3. Workbook.Worksheets[]プロパティを使用して対象のワークシートを取得します。
  4. ExportTableOptionsオブジェクトを作成し、プロパティを設定してエクスポートオプションを指定します。その後、Worksheet.Range[].ExportDataTable()メソッドを使用して指定したセル範囲をDataTableインスタンスとしてエクスポートします。または、Worksheet.Range[].ExportDataTable()メソッドを直接使用して、ワークシート全体をDataTableインスタンスとしてエクスポートすることもできます。
  5. 結果を出力します。

コード例

using Spire.Xls;
using System.Data;

namespace ExcelToDataTable
{
    class Program
    {
        static void Main(string[] args)
        {
            // Workbookのインスタンスを作成
            Workbook wb = new Workbook();

            // Excelファイルを読み込む
            wb.LoadFromFile("Sample.xlsx");

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

            // ワークシートデータを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[1, 1, 3, 3].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();
            }
        }
    }
}

結果
ExcelファイルからDataTableへデータを書き出す

DataTableからExcelファイルにデータを書き込む

Worksheet.InsertDataTable(DataTable, insertHeaders: bool, firstRow: int, firstColumn: int)メソッドを使用すると、DataTableデータを直接Excelワークシートに書き込むことができます。以下は操作手順の例です:

  1. 必要なモジュールをインポートします。
  2. データを定義し、それを使用してDataTableオブジェクトを構築します。
  3. Workbookインスタンスを作成します。
  4. Workbook.Worksheets.Clear()メソッドでデフォルトのワークシートを削除し、Workbook.Worksheets.Add()メソッドで新しいワークシートを追加します。
  5. Worksheet.InsertDataTable()メソッドを使用してDataTableデータをワークシートに書き込みます。
  6. 必要に応じてセルの書式を設定します。
  7. Workbook.SaveToFile()メソッドを使用してExcelファイルを保存します。
  8. リソースを解放します。

コード例

using Spire.Xls;
using System.Data;

namespace DataTableToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // データ配列を定義し、DataTableのインスタンスを作成
            string[,] data = new string[,]
            {
                { "Product", "Quantity", "SalesAmount" },
                { "Product A", "100", "5000.0" },
                { "Product B", "150", "7500.0" },
                { "Product C", "200", "10000.0" },
                { "Product D", "120", "6000.0" },
                { "Product E", "180", "9000.0" }
            };
            DataTable dataTable = new DataTable();
            // 列数を取得
            int columnCount = data.GetLength(1);
            // 列を追加
            for (int col = 0; col < columnCount; col++)
            {
                dataTable.Columns.Add(data[0, col]);
            }
            // データ行を追加
            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();

            // 既存のワークシートをクリアし、新しいワークシートを追加
            workbook.Worksheets.Clear();
            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("output/DataTableToExcel.xlsx", FileFormat.Version2016);
            workbook.Dispose();
        }
    }
}

結果
DataTableからExcelファイルにデータを書き込む

この記事では、C#コードを使用して.NETプログラム内でExcelファイルのデータをDataTableにインポートし、またDataTableのデータをExcelファイルにエクスポートする方法について説明しました。

1
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
1
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?