takataka430’s blog

.NET系を中心に勉強したことのまとめを書きます

C#でエクセルを操作してみた【ClosedXML】

エクセルを操作する方法を考えていたい時に、VBAもいいけどC#で動かせないかなーと思って探したらライブラリを見つけたのでコンソールアプリで使ってみました。

github.com

実行環境

Visual Studio 2019 for Mac
Mictrosoft.NETCoreApp 3.1.0

準備(コンソールアプリケーションの作成)

Visual Studio for Macをで新規プロジェクトを作成します。以下の画像のように.NET CoreConsole Applicationを選択して新規プロジェクトを作ります。

f:id:takataka430:20200411162959p:plain

NuGetパッケージのインストール

プロジェクトを作成したらパッケージをインストールします。メニューバーのProjectからManage NuGet Packages...を選択します。

f:id:takataka430:20200411163204p:plain

"ClosedXML"で検索すると検索結果の一番上に出てくるのでインストールしましょう。

f:id:takataka430:20200411164408p:plain

これで準備完了です。

エクセルの操作

Program.csにコードを書いていきましょう。以下は使い方の一例です。

using System;
using System.Data;
using ClosedXML.Excel;

namespace consoleAppCore
{
    class Program
    {
        static void Main(string[] args)
        {
            //ファイルパスの指定
            var path = "[エクセルファイルパス]";

            //エクセルを開く
            using (var wb = new XLWorkbook(path))
            {
                //シートの指定
                var sheet = wb.Worksheet("Sheet1");

                //テーブルを設定
                var table = wb.Table("Table1");



                //A1セルの値を取得
                var cellA1value = sheet.Cell("A1").Value;

                //アドレスを数字でも指定可能
                var cellA3value = sheet.Cell(3,1).Value;



                //A1セルに値を設定
                sheet.Cell("A1").SetValue("test");

                //アドレスを数字でも指定可能
                sheet.Cell(1, 1).SetValue("test");



                //A3セルのハイパーリンクを取得
                var hyperlink = sheet.Cell("A3").Hyperlink.ExternalAddress;



                //テーブル内の値を列挙する
                foreach (var row in table.DataRange.Rows())
                {
                    //現在の行の全セルを取得
                    var cells = row.Cells();

                    //それぞれのセルに記載されている値を表示
                    foreach (var cell in cells)
                    {
                        Console.Write(cell.Value);
                        Console.Write(" ");
                    }

                    Console.WriteLine();
                }



                //データテーブル型の変数を作成
                var newData = new DataTable();
                newData.Columns.Add("Comumn1", typeof(string));
                newData.Columns.Add("Comumn2", typeof(string));
                newData.Columns.Add("Comumn3", typeof(string));

                newData.Rows.Add("111", "222", "333");

                //テーブルに行を追加
                table.AppendData(newData);



                //エクセルファイルを保存する
                wb.Save();
            }
        }
    }
}

C#でもエクセルを操作できるってなんかいいですね!
これ以外にもいろいろな使い方があるようなので、詳しくは公式ドキュメントをご覧ください。