C#でExcelファイルを簡単に読み書きする方法

C#は、多くのプログラマーにとって強力なツールです。その中でもExcelファイルを操作する機能は、データ管理やレポート作成に非常に便利です。本記事では、C#を使ってExcelファイルを読み書きする基本的な方法をステップバイステップで解説します。これにより、効率的なデータ処理や自動化が可能になり、業務の効率化が図れます。

目次

環境設定と必要なライブラリ

C#でExcelファイルを操作するには、適切な開発環境と必要なライブラリを準備する必要があります。以下に、その手順を説明します。

Visual Studioのインストール

C#開発には、まずVisual Studioをインストールします。Visual StudioはMicrosoftが提供する統合開発環境(IDE)で、C#の開発に最適です。公式サイトから最新版をダウンロードし、インストール手順に従ってセットアップしてください。

NuGetパッケージの追加

Excel操作に必要なライブラリとして、EPPlusやClosedXMLなどが利用できます。ここではEPPlusを例に説明します。Visual Studioでプロジェクトを作成し、NuGetパッケージマネージャーを開いて以下のコマンドを実行します:

Install-Package EPPlus

EPPlusのインポート

プロジェクトにEPPlusを追加したら、以下のように名前空間をインポートします:

using OfficeOpenXml;

これで、Excelファイルの読み書きに必要な準備が整いました。次に、具体的なコード例を用いてExcelファイルの読み込み方法を紹介します。

Excelファイルの読み込み方法

ここでは、EPPlusライブラリを使用してExcelファイルを読み込む具体的な方法を紹介します。

Excelファイルの読み込み手順

Excelファイルを読み込むには、まずファイルパスを指定し、EPPlusのExcelPackageクラスを使用します。以下のコード例で詳細を説明します。

コード例:Excelファイルの読み込み

using System;
using System.IO;
using OfficeOpenXml;

class Program
{
    static void Main()
    {
        // Excelファイルのパスを指定
        string filePath = @"path\to\your\excel\file.xlsx";

        // ファイルが存在するか確認
        if (File.Exists(filePath))
        {
            // ExcelPackageを使用してファイルを開く
            using (var package = new ExcelPackage(new FileInfo(filePath)))
            {
                // 最初のワークシートを取得
                var worksheet = package.Workbook.Worksheets[0];

                // シート内の特定セルの値を読み取る
                string cellValue = worksheet.Cells["A1"].Text;
                Console.WriteLine("Cell A1 Value: " + cellValue);

                // シート内のすべてのセルをループして値を読み取る
                for (int row = 1; row <= worksheet.Dimension.End.Row; row++)
                {
                    for (int col = 1; col <= worksheet.Dimension.End.Column; col++)
                    {
                        Console.WriteLine($"Row {row}, Column {col}: {worksheet.Cells[row, col].Text}");
                    }
                }
            }
        }
        else
        {
            Console.WriteLine("ファイルが見つかりません。");
        }
    }
}

コードの説明

Excelファイルのパスを指定

string filePath = @"path\to\your\excel\file.xlsx";

読み込みたいExcelファイルのパスを指定します。

ExcelPackageを使用してファイルを開く

using (var package = new ExcelPackage(new FileInfo(filePath)))

ExcelPackageクラスを使用して、指定したファイルを開きます。

ワークシートの取得とセルの読み取り

var worksheet = package.Workbook.Worksheets[0];
string cellValue = worksheet.Cells["A1"].Text;

最初のワークシートを取得し、特定のセルの値を読み取ります。

シート内のすべてのセルをループして値を読み取る

for (int row = 1; row <= worksheet.Dimension.End.Row; row++)
{
    for (int col = 1; col <= worksheet.Dimension.End.Column; col++)
    {
        Console.WriteLine($"Row {row}, Column {col}: {worksheet.Cells[row, col].Text}");
    }
}

シート内のすべてのセルをループして、その値を読み取る方法を示します。

この手順で、Excelファイルの内容を簡単に読み取ることができます。次に、Excelファイルへの書き込み方法を説明します。

Excelファイルの書き込み方法

次に、EPPlusライブラリを使用してExcelファイルにデータを書き込む方法を紹介します。

Excelファイルへのデータ書き込み手順

Excelファイルにデータを書き込むには、新しいファイルを作成するか、既存のファイルを開いてデータを追加します。以下のコード例で詳細を説明します。

コード例:Excelファイルへの書き込み

using System;
using System.IO;
using OfficeOpenXml;

class Program
{
    static void Main()
    {
        // 新しいExcelファイルのパスを指定
        string filePath = @"path\to\your\new\excel\file.xlsx";

        // ExcelPackageを使用して新しいファイルを作成
        using (var package = new ExcelPackage())
        {
            // 新しいワークシートを追加
            var worksheet = package.Workbook.Worksheets.Add("SampleSheet");

            // セルにデータを書き込む
            worksheet.Cells["A1"].Value = "Hello, Excel!";
            worksheet.Cells["A2"].Value = DateTime.Now;
            worksheet.Cells["B1"].Value = 12345;
            worksheet.Cells["B2"].Value = 67.89;

            // 複数セルにまとめてデータを書き込む
            worksheet.Cells["C1:D2"].LoadFromArrays(new object[][]
            {
                new object[] { "Name", "Age" },
                new object[] { "Alice", 30 },
                new object[] { "Bob", 25 }
            });

            // ファイルを保存
            FileInfo fi = new FileInfo(filePath);
            package.SaveAs(fi);

            Console.WriteLine("Excelファイルにデータを書き込みました。");
        }
    }
}

コードの説明

新しいExcelファイルのパスを指定

string filePath = @"path\to\your\new\excel\file.xlsx";

作成したいExcelファイルのパスを指定します。

ExcelPackageを使用して新しいファイルを作成

using (var package = new ExcelPackage())

ExcelPackageクラスを使用して、新しいExcelファイルを作成します。

新しいワークシートを追加

var worksheet = package.Workbook.Worksheets.Add("SampleSheet");

新しいワークシートを追加し、そのワークシートにデータを書き込みます。

セルにデータを書き込む

worksheet.Cells["A1"].Value = "Hello, Excel!";
worksheet.Cells["A2"].Value = DateTime.Now;
worksheet.Cells["B1"].Value = 12345;
worksheet.Cells["B2"].Value = 67.89;

各セルに値を設定します。

複数セルにまとめてデータを書き込む

worksheet.Cells["C1:D2"].LoadFromArrays(new object[][]
{
    new object[] { "Name", "Age" },
    new object[] { "Alice", 30 },
    new object[] { "Bob", 25 }
});

配列を使用して、複数のセルにまとめてデータを書き込む方法を示します。

ファイルを保存

FileInfo fi = new FileInfo(filePath);
package.SaveAs(fi);

指定したパスにExcelファイルを保存します。

この手順で、Excelファイルに簡単にデータを書き込むことができます。次に、セルのフォーマット設定について説明します。

セルのフォーマット設定

Excelファイルを操作する際には、セルのフォーマットを設定して見栄えを整えることが重要です。EPPlusライブラリを使ってセルのフォーマットを設定する方法を紹介します。

セルのフォーマット設定手順

セルのフォーマット設定には、フォントスタイルや背景色、数値形式などを変更する方法があります。以下のコード例で具体的な設定方法を説明します。

コード例:セルのフォーマット設定

using System;
using System.IO;
using OfficeOpenXml;
using OfficeOpenXml.Style;
using System.Drawing;

class Program
{
    static void Main()
    {
        // 新しいExcelファイルのパスを指定
        string filePath = @"path\to\your\formatted\excel\file.xlsx";

        // ExcelPackageを使用して新しいファイルを作成
        using (var package = new ExcelPackage())
        {
            // 新しいワークシートを追加
            var worksheet = package.Workbook.Worksheets.Add("FormattedSheet");

            // セルにデータを書き込む
            worksheet.Cells["A1"].Value = "Formatted Text";
            worksheet.Cells["A2"].Value = DateTime.Now;
            worksheet.Cells["B1"].Value = 12345;
            worksheet.Cells["B2"].Value = 67.89;

            // フォントスタイルを設定
            worksheet.Cells["A1"].Style.Font.Bold = true;
            worksheet.Cells["A1"].Style.Font.Italic = true;
            worksheet.Cells["A1"].Style.Font.Size = 14;
            worksheet.Cells["A1"].Style.Font.Color.SetColor(Color.Blue);

            // セルの背景色を設定
            worksheet.Cells["A2"].Style.Fill.PatternType = ExcelFillStyle.Solid;
            worksheet.Cells["A2"].Style.Fill.BackgroundColor.SetColor(Color.LightYellow);

            // 数値形式を設定
            worksheet.Cells["B1"].Style.Numberformat.Format = "#,##0";
            worksheet.Cells["B2"].Style.Numberformat.Format = "0.00";

            // セルの枠線を設定
            worksheet.Cells["A1:B2"].Style.Border.Top.Style = ExcelBorderStyle.Thin;
            worksheet.Cells["A1:B2"].Style.Border.Left.Style = ExcelBorderStyle.Thin;
            worksheet.Cells["A1:B2"].Style.Border.Right.Style = ExcelBorderStyle.Thin;
            worksheet.Cells["A1:B2"].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;

            // ファイルを保存
            FileInfo fi = new FileInfo(filePath);
            package.SaveAs(fi);

            Console.WriteLine("Excelファイルにフォーマットを適用しました。");
        }
    }
}

コードの説明

フォントスタイルを設定

worksheet.Cells["A1"].Style.Font.Bold = true;
worksheet.Cells["A1"].Style.Font.Italic = true;
worksheet.Cells["A1"].Style.Font.Size = 14;
worksheet.Cells["A1"].Style.Font.Color.SetColor(Color.Blue);

セルのフォントを太字、斜体にし、サイズと色を設定します。

セルの背景色を設定

worksheet.Cells["A2"].Style.Fill.PatternType = ExcelFillStyle.Solid;
worksheet.Cells["A2"].Style.Fill.BackgroundColor.SetColor(Color.LightYellow);

セルの背景色を指定します。

数値形式を設定

worksheet.Cells["B1"].Style.Numberformat.Format = "#,##0";
worksheet.Cells["B2"].Style.Numberformat.Format = "0.00";

セルの数値形式を指定します。

セルの枠線を設定

worksheet.Cells["A1:B2"].Style.Border.Top.Style = ExcelBorderStyle.Thin;
worksheet.Cells["A1:B2"].Style.Border.Left.Style = ExcelBorderStyle.Thin;
worksheet.Cells["A1:B2"].Style.Border.Right.Style = ExcelBorderStyle.Thin;
worksheet.Cells["A1:B2"].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;

セルに枠線を追加します。

この手順で、Excelファイルのセルのフォーマットを設定することができます。次に、複数シートの操作方法について説明します。

複数シートの操作方法

Excelファイルを操作する際、複数のシートを管理することが一般的です。EPPlusライブラリを使って複数シートを操作する方法を紹介します。

複数シートの追加と操作手順

EPPlusを使用して、Excelファイルに複数のシートを追加し、それぞれのシートにデータを書き込む方法を説明します。

コード例:複数シートの追加と操作

using System;
using System.IO;
using OfficeOpenXml;

class Program
{
    static void Main()
    {
        // 新しいExcelファイルのパスを指定
        string filePath = @"path\to\your\multi\sheet\excel\file.xlsx";

        // ExcelPackageを使用して新しいファイルを作成
        using (var package = new ExcelPackage())
        {
            // 最初のワークシートを追加
            var sheet1 = package.Workbook.Worksheets.Add("Sheet1");
            sheet1.Cells["A1"].Value = "Data in Sheet1";

            // 2つ目のワークシートを追加
            var sheet2 = package.Workbook.Worksheets.Add("Sheet2");
            sheet2.Cells["A1"].Value = "Data in Sheet2";

            // 3つ目のワークシートを追加
            var sheet3 = package.Workbook.Worksheets.Add("Sheet3");
            sheet3.Cells["A1"].Value = "Data in Sheet3";

            // シート間でデータを参照する
            sheet1.Cells["B1"].Formula = "'Sheet2'!A1"; // Sheet2のA1セルを参照
            sheet2.Cells["B1"].Formula = "'Sheet3'!A1"; // Sheet3のA1セルを参照

            // ファイルを保存
            FileInfo fi = new FileInfo(filePath);
            package.SaveAs(fi);

            Console.WriteLine("Excelファイルに複数シートを追加しました。");
        }
    }
}

コードの説明

最初のワークシートを追加

var sheet1 = package.Workbook.Worksheets.Add("Sheet1");
sheet1.Cells["A1"].Value = "Data in Sheet1";

最初のシートを追加し、セルにデータを書き込みます。

2つ目のワークシートを追加

var sheet2 = package.Workbook.Worksheets.Add("Sheet2");
sheet2.Cells["A1"].Value = "Data in Sheet2";

2つ目のシートを追加し、セルにデータを書き込みます。

3つ目のワークシートを追加

var sheet3 = package.Workbook.Worksheets.Add("Sheet3");
sheet3.Cells["A1"].Value = "Data in Sheet3";

3つ目のシートを追加し、セルにデータを書き込みます。

シート間でデータを参照する

sheet1.Cells["B1"].Formula = "'Sheet2'!A1"; // Sheet2のA1セルを参照
sheet2.Cells["B1"].Formula = "'Sheet3'!A1"; // Sheet3のA1セルを参照

シート間でセルのデータを参照する方法を示します。

この手順で、Excelファイル内の複数のシートを操作することができます。次に、エラーハンドリングについて説明します。

エラーハンドリング

Excelファイル操作中には、さまざまなエラーが発生する可能性があります。ここでは、C#とEPPlusを使用してエラーを適切に処理する方法を紹介します。

エラーハンドリングの基本手順

エラーハンドリングを行うには、try-catchブロックを使用して、発生する可能性のある例外をキャッチし、適切に対応します。以下のコード例で詳細を説明します。

コード例:エラーハンドリング

using System;
using System.IO;
using OfficeOpenXml;

class Program
{
    static void Main()
    {
        // Excelファイルのパスを指定
        string filePath = @"path\to\your\excel\file.xlsx";

        try
        {
            // ファイルが存在するか確認
            if (!File.Exists(filePath))
            {
                throw new FileNotFoundException("指定されたファイルが見つかりません。");
            }

            // ExcelPackageを使用してファイルを開く
            using (var package = new ExcelPackage(new FileInfo(filePath)))
            {
                // 最初のワークシートを取得
                var worksheet = package.Workbook.Worksheets[0];

                // シート内の特定セルの値を読み取る
                string cellValue = worksheet.Cells["A1"].Text;
                Console.WriteLine("Cell A1 Value: " + cellValue);
            }
        }
        catch (FileNotFoundException ex)
        {
            Console.WriteLine("エラー: " + ex.Message);
        }
        catch (InvalidOperationException ex)
        {
            Console.WriteLine("操作エラー: " + ex.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("予期しないエラー: " + ex.Message);
        }
        finally
        {
            Console.WriteLine("Excelファイルの処理が完了しました。");
        }
    }
}

コードの説明

tryブロック内でのファイル操作

try
{
    // ファイルが存在するか確認
    if (!File.Exists(filePath))
    {
        throw new FileNotFoundException("指定されたファイルが見つかりません。");
    }

    // ExcelPackageを使用してファイルを開く
    using (var package = new ExcelPackage(new FileInfo(filePath)))
    {
        // 最初のワークシートを取得
        var worksheet = package.Workbook.Worksheets[0];

        // シート内の特定セルの値を読み取る
        string cellValue = worksheet.Cells["A1"].Text;
        Console.WriteLine("Cell A1 Value: " + cellValue);
    }
}

ファイル操作をtryブロック内で行い、例外が発生した場合にキャッチします。

FileNotFoundExceptionのキャッチ

catch (FileNotFoundException ex)
{
    Console.WriteLine("エラー: " + ex.Message);
}

指定されたファイルが見つからない場合の例外をキャッチし、エラーメッセージを表示します。

InvalidOperationExceptionのキャッチ

catch (InvalidOperationException ex)
{
    Console.WriteLine("操作エラー: " + ex.Message);
}

無効な操作が行われた場合の例外をキャッチし、エラーメッセージを表示します。

汎用的なExceptionのキャッチ

catch (Exception ex)
{
    Console.WriteLine("予期しないエラー: " + ex.Message);
}

その他の予期しない例外をキャッチし、エラーメッセージを表示します。

finallyブロック

finally
{
    Console.WriteLine("Excelファイルの処理が完了しました。");
}

tryブロック内の処理が終了した後、必ず実行されるコードを記述します。

この手順で、Excelファイル操作中に発生する可能性のあるエラーを適切に処理できます。次に、応用例としてデータの自動更新方法について説明します。

応用例:データの自動更新

C#を使用してExcelファイル内のデータを定期的に自動更新する方法について説明します。この応用例では、特定の時間間隔でExcelファイルを更新するスクリプトを作成します。

データ自動更新の手順

タイマーを使用して定期的にExcelファイルを更新する方法を示します。以下のコード例を参考にしてください。

コード例:データの自動更新

using System;
using System.IO;
using System.Timers;
using OfficeOpenXml;

class Program
{
    private static Timer updateTimer;
    private static string filePath = @"path\to\your\auto\update\excel\file.xlsx";

    static void Main()
    {
        // タイマーの設定
        updateTimer = new Timer(60000); // 60秒ごとに更新
        updateTimer.Elapsed += OnTimedEvent;
        updateTimer.AutoReset = true;
        updateTimer.Enabled = true;

        Console.WriteLine("データ自動更新プログラムが開始されました。Enterキーを押すと終了します。");
        Console.ReadLine();
    }

    private static void OnTimedEvent(Object source, ElapsedEventArgs e)
    {
        try
        {
            // Excelファイルを開く
            using (var package = new ExcelPackage(new FileInfo(filePath)))
            {
                var worksheet = package.Workbook.Worksheets[0];

                // セルのデータを更新
                worksheet.Cells["A1"].Value = "Updated at " + DateTime.Now.ToString();
                worksheet.Cells["B1"].Value = new Random().Next(1, 100);

                // ファイルを保存
                package.Save();
                Console.WriteLine("Excelファイルが更新されました: " + DateTime.Now);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("エラー: " + ex.Message);
        }
    }
}

コードの説明

タイマーの設定

updateTimer = new Timer(60000); // 60秒ごとに更新
updateTimer.Elapsed += OnTimedEvent;
updateTimer.AutoReset = true;
updateTimer.Enabled = true;

タイマーを設定し、60秒ごとにOnTimedEventメソッドが呼び出されるようにします。

OnTimedEventメソッド

private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
    try
    {
        // Excelファイルを開く
        using (var package = new ExcelPackage(new FileInfo(filePath)))
        {
            var worksheet = package.Workbook.Worksheets[0];

            // セルのデータを更新
            worksheet.Cells["A1"].Value = "Updated at " + DateTime.Now.ToString();
            worksheet.Cells["B1"].Value = new Random().Next(1, 100);

            // ファイルを保存
            package.Save();
            Console.WriteLine("Excelファイルが更新されました: " + DateTime.Now);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("エラー: " + ex.Message);
    }
}

定期的にExcelファイルを開き、セルのデータを更新し、ファイルを保存します。

プログラムの実行

Console.WriteLine("データ自動更新プログラムが開始されました。Enterキーを押すと終了します。");
Console.ReadLine();

プログラムを実行し、ユーザーがEnterキーを押すまで自動更新を続けます。

この手順で、C#を使用してExcelファイルのデータを自動更新することができます。最後に、この記事の内容をまとめます。

まとめ

この記事では、C#を使用してExcelファイルを読み書きする方法について詳細に説明しました。以下は、各セクションで取り上げたポイントのまとめです:

環境設定と必要なライブラリ

C#でExcelファイルを操作するために必要な開発環境とEPPlusライブラリのインストール方法を解説しました。

Excelファイルの読み込み方法

EPPlusを使用してExcelファイルからデータを読み取る具体的なコード例を示しました。

Excelファイルの書き込み方法

Excelファイルにデータを書き込む方法と、その実装例を紹介しました。

セルのフォーマット設定

セルのフォーマットを設定して、Excelファイルの見栄えを整える方法を説明しました。

複数シートの操作方法

EPPlusを使用して複数のシートを追加し、シート間でデータを操作する方法を示しました。

エラーハンドリング

Excelファイル操作中に発生する可能性のあるエラーを適切に処理する方法について説明しました。

応用例:データの自動更新

タイマーを使用して定期的にExcelファイルを自動更新するスクリプトの例を紹介しました。

C#とEPPlusを使用することで、Excelファイルの操作が非常に簡単になり、データ管理や自動化が容易になります。これを機に、さらに高度なデータ処理や分析に挑戦してみてください。

この情報が、あなたのプロジェクトに役立つことを願っています。

コメント

コメントする

目次