IRONXLの使用

C#でExcelをSQL Serverにインポートする方法

公開済み 2024年7月1日
共有:

イントロダクション

多くのビジネスコンテキストにおいて、ExcelからSQL Serverへのデータインポートは一般的な必要性です。 Excelファイルからデータを読み取り、SQL Serverデータベースに入力することがこの活動に含まれるタスクです。 エクスポートウィザードがよく使用されていますが、IronXLはデータ処理に対してよりプログラム的で柔軟なアプローチを提供します。 IronXLは、ファイルからExcelデータをインポートできる強力なC#ライブラリです。 したがって、この操作を迅速化することが可能です。 そのため、本投稿では、C#を使用してExcelをSQL Serverにインポートする際の設定、実行、及び拡張に関する詳細なガイドを提供します。

C#でExcelをSQL Serverにインポートする方法: 図1 - IronXL: C# エクセルライブラリ

C#でExcelをSQL Serverにインポートする方法

  1. 開発環境を設定する

  2. エクセルファイルを準備する

  3. SQL Serverデータベースに接続する

  4. IronXLを使用してExcelファイルからデータを読み取る

  5. IronPDFを使用してデータをエクスポートし、PDFレポートを生成する

  6. PDFレポートをレビューしてください。

IronXLとは何ですか?

IronXLは、時々IronXL.Excelとも呼ばれますが、.NETアプリケーションでExcelファイルを扱うのを容易にするために作られた、機能豊富なC#ライブラリです。 この強力なツールは、サーバーサイドアプリケーションに最適です。開発者は、コンピューターにMicrosoft Excelをインストールすることなく、Excelファイルを読み取り、作成し、編集することができます。 Excel 2007以降(.xlsx)Excel 97–2003(.xls)IronXLは様々なExcelファイルバージョンの管理において柔軟性を提供するため、複数の形式をサポートしています。 シート、行、列の操作に加えて、データの挿入、更新、削除などの大幅なデータ操作を可能にします。

IronXLは、セルのフォーマットやExcelの数式の対応もしており、複雑で整ったスプレッドシートのプログラム生成を可能にします。 パフォーマンス最適化と.NET Framework、.NET Core、.NET 5/6などの複数の.NETプラットフォームとの互換性により、IronXLは巨大なデータセットの効果的な処理を保証します。 それは、他の.NETフレームワークとのスムーズなインターフェースによって、シンプルなデータのインポート/エクスポート活動から複雑なレポートシステムに至るまで、Excelファイル操作をアプリケーションに統合したいと考える開発者にとって柔軟なオプションです。

主な機能

Excelファイルの読み取りおよび書き込み

開発者はIronXLを使用してExcelファイルからデータを読み書きできます。 新しいExcelファイルを作成したり、既存のファイルを編集したりするのは簡単です。

Microsoft Excelのインストールは不要です。

IronXLは、他の特定のライブラリとは対照的に、アプリケーションをホストしているコンピュータにMicrosoft Excelをインストールする必要がありません。 そのため、サーバーサイドアプリケーションに最適です。

さまざまなExcelフォーマットへの対応

このライブラリは、.xls 形式をサポートすることでさまざまなExcelファイルタイプの管理において高い汎用性を提供します。(Excel 97-2003)および .xlsx(Excel 2007以降)形式

新しいVisual Studioプロジェクトを作成する

Visual Studioコンソールプロジェクトは簡単に作成できます。 Visual Studioで、コンソールアプリケーションを作成するために以下の操作を行ってください。

  1. Visual Studio を開く: Visual Studio がコンピュータにインストールされていることを確認してから開いてください。

  2. 新しいプロジェクトを開始: ファイル -> 新規 -> プロジェクト を選択します。

    C#: SQL ServerにExcelをインポートする方法: 図2 - 新規クリック

  3. Create a new projectボックスの左パネルから、お好みのプログラミング言語を選択してください。例えば、C#。

  4. 「コンソールアプリ」または「コンソールアプリ」(.NET Core(ドットネット コア))` 利用可能なプロジェクトテンプレートのリストからテンプレートを選択します。

  5. Name欄にプロジェクトの名前を入力してください。

    ExcelをSQL Serverにインポートする方法(C#):図3 - 名前と保存場所を指定

  6. プロジェクトを保存する場所を決定してください。

  7. Createをクリックして、コンソールアプリケーションプロジェクトを起動します。

    C#でのExcelからSQL Serverへのインポート方法: 図4 - 最後に「作成」をクリックしてアプリケーションを起動

IronXLライブラリのインストール

アップデートに伴い、IronXLライブラリのインストールが必要です。 最後に、手順を完了するために、NuGetパッケージマネージャーコンソールを起動し、次のコマンドを入力してください。

Install-Package IronXL.Excel

C#でExcelをSQL Serverにインポートする方法: 図5 - 上記のコマンドをNuGetパッケージマネージャーコンソールに入力してIronXLをインストールする

NuGetパッケージマネージャーを使用して IronXL パッケージを検索することも別の方法です。 これにより、IronXLにリンクされたNuGetパッケージのどれをダウンロードするか選択できます。

C#でExcelをSQL Serverにインポートする方法: 図6 – NuGetパッケージマネージャーを使用して、代わりにIronXLを検索してインストールします。

IronXLを使用してExcelをSQLにインポート

IronXLを使用してExcelからデータを読み取る

Excelファイルからデータを読み取るプロセスは、IronXLによって簡単になります。 以下の例は、IronXL を使用して Excel ファイルからデータを読み取る方法を示しています。このアプローチでは、データは辞書のリストに読み込まれ、保存されます。各辞書は、Excel シートの行に対応しています。

using IronXL;
using System;
using System.Collections.Generic;

public class ExcelReader
{
    public static List<Dictionary<string, object>> ReadExcelFile(string filePath)
    {
        var data = new List<Dictionary<string, object>>();
        WorkBook workbook = WorkBook.Load(filePath);
        WorkSheet sheet = workbook.WorkSheets[0];

        var headers = new List<string>();
        foreach (var header in sheet.Rows[0].Columns)
        {
            headers.Add(header.ToString());
        }

        for (int i = 1; i < sheet.Rows.Count; i++)
        {
            var rowData = new Dictionary<string, object>();
            for (int j = 0; j < headers.Count; j++)
            {
                rowData[headers[j]] = sheet.Rows[i][j].Value;
            }
            data.Add(rowData);
        }

        return data;
    }
}
using IronXL;
using System;
using System.Collections.Generic;

public class ExcelReader
{
    public static List<Dictionary<string, object>> ReadExcelFile(string filePath)
    {
        var data = new List<Dictionary<string, object>>();
        WorkBook workbook = WorkBook.Load(filePath);
        WorkSheet sheet = workbook.WorkSheets[0];

        var headers = new List<string>();
        foreach (var header in sheet.Rows[0].Columns)
        {
            headers.Add(header.ToString());
        }

        for (int i = 1; i < sheet.Rows.Count; i++)
        {
            var rowData = new Dictionary<string, object>();
            for (int j = 0; j < headers.Count; j++)
            {
                rowData[headers[j]] = sheet.Rows[i][j].Value;
            }
            data.Add(rowData);
        }

        return data;
    }
}
Imports IronXL
Imports System
Imports System.Collections.Generic

Public Class ExcelReader
	Public Shared Function ReadExcelFile(ByVal filePath As String) As List(Of Dictionary(Of String, Object))
		Dim data = New List(Of Dictionary(Of String, Object))()
		Dim workbook As WorkBook = WorkBook.Load(filePath)
		Dim sheet As WorkSheet = workbook.WorkSheets(0)

		Dim headers = New List(Of String)()
		For Each header In sheet.Rows(0).Columns
			headers.Add(header.ToString())
		Next header

		For i As Integer = 1 To sheet.Rows.Count - 1
			Dim rowData = New Dictionary(Of String, Object)()
			For j As Integer = 0 To headers.Count - 1
				rowData(headers(j)) = sheet.Rows(i)(j).Value
			Next j
			data.Add(rowData)
		Next i

		Return data
	End Function
End Class
VB   C#

SQL Serverへの接続

System.Data.SqlClient 名前空間の SqlConnection クラスを使用して、SQL Server への接続を確立します。 適切な接続文字列を持っていることを確認してください。通常、接続文字列にはデータベース名、サーバー名、および認証情報が含まれます。 SQL Serverデータベースに接続してデータを追加する方法は、以下の例で説明されています。

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;

public class SqlServerConnector
{
    private string connectionString;

    public SqlServerConnector(string connectionString)
    {
        this.connectionString = connectionString;
    }

    public void InsertData(Dictionary<string, object> data, string tableName)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            var columns = string.Join(",", data.Keys);
            var parameters = string.Join(",", data.Keys.Select(key => "@" + key));
            string query = $"INSERT INTO {tableName} ({columns}) VALUES ({parameters})";

            using (SqlCommand command = new SqlCommand(query, connection))
            {
                foreach (var kvp in data)
                {
                    command.Parameters.AddWithValue("@" + kvp.Key, kvp.Value ?? DBNull.Value);
                }
                command.ExecuteNonQuery();
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;

public class SqlServerConnector
{
    private string connectionString;

    public SqlServerConnector(string connectionString)
    {
        this.connectionString = connectionString;
    }

    public void InsertData(Dictionary<string, object> data, string tableName)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            var columns = string.Join(",", data.Keys);
            var parameters = string.Join(",", data.Keys.Select(key => "@" + key));
            string query = $"INSERT INTO {tableName} ({columns}) VALUES ({parameters})";

            using (SqlCommand command = new SqlCommand(query, connection))
            {
                foreach (var kvp in data)
                {
                    command.Parameters.AddWithValue("@" + kvp.Key, kvp.Value ?? DBNull.Value);
                }
                command.ExecuteNonQuery();
            }
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports System.Data.SqlClient
Imports System.Linq

Public Class SqlServerConnector
	Private connectionString As String

	Public Sub New(ByVal connectionString As String)
		Me.connectionString = connectionString
	End Sub

	Public Sub InsertData(ByVal data As Dictionary(Of String, Object), ByVal tableName As String)
		Using connection As New SqlConnection(connectionString)
			connection.Open()
			Dim columns = String.Join(",", data.Keys)
			Dim parameters = String.Join(",", data.Keys.Select(Function(key) "@" & key))
			Dim query As String = $"INSERT INTO {tableName} ({columns}) VALUES ({parameters})"

			Using command As New SqlCommand(query, connection)
				For Each kvp In data
					command.Parameters.AddWithValue("@" & kvp.Key, If(kvp.Value, DBNull.Value))
				Next kvp
				command.ExecuteNonQuery()
			End Using
		End Using
	End Sub
End Class
VB   C#

SQL Server と IronXL の組み合わせ

Excelファイルを読み込み、SQLデータベースにデータを挿入するロジックが確立されたら、これらの機能を統合してインポートプロセスを完了させます。 次のアプリケーションは、Excelファイルから情報を受け取り、Microsoft SQL Serverデータベースに追加します。

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        string excelFilePath = "path_to_your_excel_file.xlsx";
        string connectionString = "your_sql_server_connection_string";
        string tableName = "your_table_name";

        // Read data from Excel
        List<Dictionary<string, object>> excelData = ExcelReader.ReadExcelFile(excelFilePath);

        // Insert data into SQL Server
        SqlServerConnector sqlConnector = new SqlServerConnector(connectionString);
        foreach (var row in excelData)
        {
            sqlConnector.InsertData(row, tableName);
        }

        Console.WriteLine("Data import completed successfully.");
    }
}
using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        string excelFilePath = "path_to_your_excel_file.xlsx";
        string connectionString = "your_sql_server_connection_string";
        string tableName = "your_table_name";

        // Read data from Excel
        List<Dictionary<string, object>> excelData = ExcelReader.ReadExcelFile(excelFilePath);

        // Insert data into SQL Server
        SqlServerConnector sqlConnector = new SqlServerConnector(connectionString);
        foreach (var row in excelData)
        {
            sqlConnector.InsertData(row, tableName);
        }

        Console.WriteLine("Data import completed successfully.");
    }
}
Imports System
Imports System.Collections.Generic

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim excelFilePath As String = "path_to_your_excel_file.xlsx"
		Dim connectionString As String = "your_sql_server_connection_string"
		Dim tableName As String = "your_table_name"

		' Read data from Excel
		Dim excelData As List(Of Dictionary(Of String, Object)) = ExcelReader.ReadExcelFile(excelFilePath)

		' Insert data into SQL Server
		Dim sqlConnector As New SqlServerConnector(connectionString)
		For Each row In excelData
			sqlConnector.InsertData(row, tableName)
		Next row

		Console.WriteLine("Data import completed successfully.")
	End Sub
End Class
VB   C#

このクラスは、IronXLを使用して指定されたExcelファイルからデータを読み取ることを担当しています。ReadExcelFile関数はExcelワークブックを読み込み、最初のワークシートを開き、データワークシートの行をループすることでデータを収集します。 テーブルの取り扱いを容易にするために、情報は辞書のリストに保持されています。

SQL ServerにExcelをインポートする方法 (C#): 図7 - 入力Excelファイルの例

データはこのクラスによって指定されたデータベーステーブルに挿入され、SQL Server データベースへの接続も管理されます。 InsertData メソッドは、SQL インジェクションを防ぐためにパラメータ化されたクエリを使用し、辞書のキーを列名として動的に SQL INSERT クエリを構築します。

ExcelReader クラスを使用して Excel ファイルからデータを SQL テーブルに読み込み、SqlServerConnector クラスを使用して各行を SQL Server テーブルに挿入します。Main 関数はこのプロセス全体を管理します。

C#でExcelをSQL Serverにインポートする方法:図8 - SQL Serverでのクエリ実行成功を示す出力

エラーハンドリングと最適化は、堅牢で効率的なインポートプロセスを保証するために非常に重要です。 堅牢なエラーハンドリングを実装することで、欠損ファイル、無効なデータ形式、SQL例外などの潜在的な問題を管理できます。 以下にエラーハンドリングを組み込む例を示します。

try
{
    // Insert the importing logic here
}
catch(Exception ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
try
{
    // Insert the importing logic here
}
catch(Exception ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
Try
	' Insert the importing logic here
Catch ex As Exception
	Console.WriteLine("An error occurred: " & ex.Message)
End Try
VB   C#

結論

.NETアプリケーション内でExcelファイルを管理するための効果的かつ信頼性の高い方法として、C#とIronXLを使用してExcelからMS SQLデータベースにデータをインポートすることです。 IronXLは、複数のExcel形式に対応しており、Microsoft Excelをインストールする必要なく、Excelデータの読み書きを簡単にする強力な機能を備えています。 System.Data.SqlClientとIronXLを統合することで、開発者はパラメータ化されたクエリを使用してSQLサーバー間でデータを簡単に移動させることができ、セキュリティを改善しSQLインジェクションを防止できます。

最後に、.NET開発のツールセットにIronXLとIron Softwareを追加すると、Excelの操作、PDFの作成、OCRの利用、バーコードの活用を効率的に行うことができます。 Iron Software の柔軟なスイートと IronXL の使いやすさ、相互運用性、およびパフォーマンスを組み合わせることで、開発が効率化され、アプリケーションの機能が向上します。 プロジェクトの要件に応じてカスタマイズされた明確なライセンスオプションにより、開発者は自信を持って適切なモデルを選択できます。 これらの利点を活用することで、開発者はコンプライアンスと透明性を維持しながら、さまざまな課題に効果的に取り組むことができます。

< 以前
C#でExcelファイルを操作する方法
次へ >
C#を使用してExcelのセルを自動調整する方法