チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル»xlsnetdataimportexport

Displaying items by tag: xlsnetdataimportexport

システム間でデータを効率的に統合することは、生産性を向上させ、情報に基づいた意思決定を行う上で非常に重要です。この分野で一般的なタスクの 1 つは、Excel とデータベース間でデータを転送することです。Excel ファイルをデータベースにインポートすることで、Excel にはない効率的なクエリ、トランザクションサポート、並行処理管理などの強力な機能を活用できます。一方、データベースのデータを Excel にエクスポートすることで、広く使用されている馴染みのある形式で、詳細な分析、レポート作成、および共有が可能になります。

この記事では、Spire.XLS for .NET と C# を使用して、Excel データをデータベースにインポートする方法と、データベースのデータを Excel ファイルにエクスポートする方法を解説します。

Spire.XLS for .NET をインストールします

まず、Spire.XLS for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.XLS

Excel データをデータベースにインポートする

Spire.XLS for .NET を使うと、Workbook.LoadFromFile() メソッドで Excel ファイルをロードし、CellRange.Value プロパティを利用してセルデータを取得できます。その後、System.Data.SQLite モジュールなどを使用してデータベース操作を行い、データをデータベースに書き込むことが可能です。

以下の手順とコードでは、SQLite を例にして、C# を使って Excel データをデータベースにインポートする方法を示します。

  • Excel ファイルと出力先データベースのパスを定義します。
  • Workbook クラスのインスタンスを作成し、Workbook.LoadFromFile() で Excel ファイルを読み込みます。
  • SQLite データベースを作成するか、既存のデータベースに接続します。
  • ワークブック内の各ワークシートを繰り返し処理し、各ワークシートごとにデータベーステーブルを作成します。
  • ワークシートの最初の行を取得し、列名として使用します。
  • 残りの行とセルを繰り返し処理して、データをデータベースに挿入します。
  • C#
using System.Data.SQLite;
using Spire.Xls;

namespace ExcelToSQLite
{
    class Program
    {
        static void Main(string[] args)
        {
            // Excelファイルのパス
            string excelFilePath = "Sample.xlsx";

            // SQLiteデータベースのパス
            string sqliteFilePath = "output/Database.db";

            // Excelファイルを開く
            Workbook workbook = new Workbook();
            workbook.LoadFromFile(excelFilePath);

            // データベースファイルが存在しない場合、新規作成する
            if (!File.Exists(sqliteFilePath))
            {
                SQLiteConnection.CreateFile(sqliteFilePath);
                Console.WriteLine("新しいSQLiteデータベースファイルが作成されました: output.db");
            }

            // SQLite接続を作成
            using (SQLiteConnection connection = new SQLiteConnection($"Data Source={sqliteFilePath};Version=3;"))
            {
                connection.Open();

                // 各ワークシートを繰り返し処理
                foreach (Worksheet sheet in workbook.Worksheets)
                {
                    string tableName = sheet.Name;

                    // 最初の行を列名として取得
                    var columns = sheet.Rows[0].CellList;
                    string createTableQuery = $"CREATE TABLE IF NOT EXISTS [{tableName}] (";

                    foreach (var column in columns)
                    {
                        createTableQuery += $"[{column.Value}] TEXT,";
                    }
                    createTableQuery = createTableQuery.TrimEnd(',') + ");";

                    // テーブルを作成
                    using (SQLiteCommand createTableCommand = new SQLiteCommand(createTableQuery, connection))
                    {
                        createTableCommand.ExecuteNonQuery();
                    }

                    // データを挿入
                    for (int i = 1; i < sheet.Rows.Length; i++) // 最初の行をスキップ
                    {
                        var row = sheet.Rows[i];
                        string insertQuery = $"INSERT INTO [{tableName}] VALUES (";
                        foreach (var cell in row.CellList)
                        {
                            insertQuery += $"'{cell.Value?.Replace("'", "''")}',"; // SQLインジェクション対策
                        }
                        insertQuery = insertQuery.TrimEnd(',') + ");";

                        using (SQLiteCommand insertCommand = new SQLiteCommand(insertQuery, connection))
                        {
                            insertCommand.ExecuteNonQuery();
                        }
                    }
                }

                connection.Close();
                workbook.Dispose();
            }

            Console.WriteLine("Excelのデータは正常に新しいSQLiteデータベースに書き込まれました!");
        }
    }
}

Excel データをデータベースにインポートする

データベースのデータを Excel ファイルにエクスポートする

SQLite データベースからデータを読み取り、Workbook オブジェクトを使用して新しい Excel ファイルを生成する方法を説明します。

  • データベースと出力 Excel ファイルのパスを定義します。
  • Workbook インスタンスを作成し、デフォルトのワークシートを削除します。
  • データベースに接続し、すべてのテーブル名を取得します。
  • 各テーブルごとにワークシートを作成し、テーブル名をシート名として設定します。
  • テーブルの列名を取得し、ワークシートの最初の行に書き込みます。
  • テーブル内のデータを順次ワークシートに書き込みます。
  • C#
using System.Data;
using System.Data.SQLite;
using Spire.Xls;

namespace SQLiteToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // SQLiteデータベースのパス
            string sqliteFilePath = "Database.db";

            // Excelファイルのパス
            string excelFilePath = "output/DatabaseToExcel.xlsx";

            // 新しいWorkbookインスタンスを作成
            Workbook workbook = new Workbook();
            // デフォルトのワークシートをクリア
            workbook.Worksheets.Clear();

            // SQLite接続を作成
            using (SQLiteConnection connection = new SQLiteConnection($"Data Source={sqliteFilePath};Version=3;"))
            {
                connection.Open();

                // すべてのテーブル名を取得
                DataTable tables = connection.GetSchema("Tables");

                // 各テーブルを繰り返し処理
                foreach (DataRow tableRow in tables.Rows)
                {
                    string tableName = tableRow["TABLE_NAME"].ToString();

                    // 新しいワークシートを作成
                    Worksheet sheet = workbook.Worksheets.Add(tableName);

                    // テーブルデータを取得
                    string selectQuery = $"SELECT * FROM [{tableName}]";
                    using (SQLiteCommand command = new SQLiteCommand(selectQuery, connection))
                    {
                        using (SQLiteDataReader reader = command.ExecuteReader())
                        {
                            // 列名を取得して、最初の行に書き込む
                            for (int col = 0; col < reader.FieldCount; col++)
                            {
                                sheet.Range[1, col + 1].Value = reader.GetName(col);
                            }
                            // ヘッダーのフォントスタイルを設定
                            sheet.Rows[0].Style.Font.IsBold = true;
                            sheet.Rows[0].Style.Font.Size = 12;

                            // データ行を挿入
                            int rowIndex = 2;
                            while (reader.Read())
                            {
                                for (int col = 0; col < reader.FieldCount; col++)
                                {
                                    sheet.Range[rowIndex, col + 1].Value = reader.GetValue(col).ToString();
                                    // 列幅を自動調整
                                    sheet.AutoFitColumn(col + 1);
                                }
                                // データ行のフォントスタイルを設定
                                sheet.Rows[rowIndex - 1].Style.Font.Size = 11;
                                rowIndex++;
                            }
                        }
                    }
                }

                connection.Close();
            }

            // Excelファイルを保存
            workbook.SaveToFile(excelFilePath);
            workbook.Dispose();
            Console.WriteLine("データは正常にExcelファイルにエクスポートされました!");
        }
    }
}

データベースのデータを Excel ファイルにエクスポートする

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Tagged under

C# アプリケーションでは、Excel ファイルと DataTable 間でデータを効率よく変換することが、データの利用、分析、処理能力を向上させるために不可欠です。Excel から DataTable にデータを転送することで、.NET の機能を最大限に活用し、データの分析や変換、処理が可能になります。また、データを Excel に戻すことで、他のシステムと簡単に共有、報告、および統合できます。本記事では、C# コードを使用して Spire.XLS for .NET を活用し、Excel ファイルから DataTable にデータをエクスポートしDataTable から Excel ファイルにデータをインポートする方法を説明します。

Spire.XLS for .NET をインストールします

まず、Spire.XLS for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.XLS

Excel ファイルから DataTable へのデータエクスポート

Spire.XLS for .NET は、Worksheet.ExportDataTable() メソッドを提供しており、Excel ワークシート全体のデータを DataTable オブジェクトにエクスポートできます。また、Worksheet.Range[].ExportDataTable() メソッドにより、特定のセル範囲から DataTable にエクスポートすることも可能です。ExportTableOptions クラスを使用すると、セル範囲からデータをエクスポートする際のオプションをカスタマイズできます。Excel データを DataTable にエクスポートする詳しい手順は以下の通りです:

  • Workbook クラスのインスタンスを作成し、Workbook.LoadFromFile() メソッドを使用して Excel ファイルを読み込みます。
  • Workbook.Worksheets[] プロパティで、Excel ファイル内のワークシートにアクセスします。
  • Worksheet.ExportDataTable() メソッドで、ワークシート全体のデータを DataTable オブジェクトにエクスポートします。
  • または、ExportTableOptions のインスタンスを作成してエクスポートオプションを指定し、特定のセル範囲から DataTable にデータをエクスポートします。
  • C#
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 = true;
            options.RenameStrategy = RenameStrategy.Letter;
            DataTable dataTable = sheet.Range[2, 1, 6, 5].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 ファイルへのデータインポート

Spire.XLS for .NET は、DataTable オブジェクトのデータを Excel ワークシートに挿入するための Worksheet.InsertDataTable(DataTable, colHeaders: bool, firstRow: int, firstColumn: int) メソッドを提供しています。DataTable から Excel にデータをインポートする手順は以下の通りです:

  • データを定義し、DataTable オブジェクトを作成します。
  • Workbook インスタンスを作成し、Workbook.Worksheets.Clear() メソッドでデフォルトのワークシートをクリアします。
  • Workbook.Worksheets.Add(sheetName: string) メソッドで、指定した名前の新しいワークシートを挿入します。
  • Worksheet.InsertDataTable() メソッドを使用して、DataTable オブジェクトからワークシートにデータを挿入します。
  • 必要に応じて書式を調整します。
  • Workbook.SaveToFile() メソッドでワークブックを保存します。
  • C#
using Spire.Xls;
using System.Data;

namespace DataTableToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // データセットを定義し、DataTableインスタンスを作成
            // 新しい製品と数量でデータ配列を再定義
            string[,] data = new string[,]
            {
                { "カテゴリ", "書名", "著者", "出版社", "価格(円)" },
                { "小説", "ノルウェイの森", "村上春樹", "講談社", "1500" },
                { "科学", "人工知能の基礎", "佐藤一郎", "技術評論社", "2500" },
                { "歴史", "坂の上の雲", "司馬遼太郎", "文藝春秋", "1800" },
                { "哲学", "善と悪の彼岸", "フリードリッヒ・ニーチェ", "岩波書店", "1300" },
                { "芸術", "日本画入門", "横山大観", "美術出版社", "2000" },
                { "教育", "子どもを伸ばす方法", "齋藤孝", "NHK出版", "1200" }
            };
            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();

            // デフォルトのワークシートをクリアし、新しいワークシートを追加
            workbook.Worksheets.Clear();
            Worksheet sheet = workbook.Worksheets.Add("書目");

            // DataTableデータをワークシートに挿入
            sheet.InsertDataTable(dataTable, true, 1, 1);

            // 必要に応じてフォーマットを調整
            // フォントを調整
            sheet.Rows[0].Style.Font.Size = 13;
            sheet.Rows[0].Style.Font.IsBold = true;
            sheet.Rows[0].Style.Font.FontName = "Yu Gothic UI";
            for (int j = 1; j < sheet.AllocatedRange.RowCount; j++)
            {
                sheet.Rows[j].Style.Font.Size = 12;
                sheet.Rows[j].Style.Font.FontName = "Yu Gothic UI";
            }
            // 列幅を自動調整
            for (int i = 1; i <= sheet.AllocatedRange.ColumnCount; i++)
            {
                sheet.AutoFitColumn(i);
            }

            // ワークブックをファイルに保存
            workbook.SaveToFile("output/DataTableをExcelに挿入.xlsx", FileFormat.Version2016);
            workbook.Dispose();
        }
    }
}

DataTable から Excel ファイルへのデータインポート

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Tagged under