C# ClosedXMLでEXCLEファイルを作成する

  • 作成日 2021.10.01
  • 更新日 2022.04.09
  • C#
C# ClosedXMLでEXCLEファイルを作成する

C#で、ClosedXMLでEXCLEファイルを作成するサンプルコードを記述してます。

環境

  • OS windows10 pro 64bit
  • .net core 3.1
  • Microsoft Visual Studio Community 2019 Version 16.7.1

ClosedXMLでEXCLEファイルを作成

ClosedXMLでEXCLEファイルを作成するには、まずはnugetで入手します。
※xls形式のデータは扱えません。

Install-Package ClosedXML

以下は、ClosedXMLを使用してEXCLEファイルを作成するだけのコードとなります。

using System;
using System.IO;
using ClosedXML.Excel;

namespace testapp
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // xls形式のデータは扱えない
                var path = @"C:\excel\test.xlsx";

                using (var workbook = new XLWorkbook())
                {
                    // シートを生成
                    var worksheet = workbook.Worksheets.Add("testシート");

                    // セルに値を挿入
                    worksheet.Cell("A1").Value = "A1";
                    worksheet.Cell(2, 1).Value = "A2";
                    worksheet.Cell(3, 1).Value = "A3";

                    // 範囲を指定
                    worksheet.Range(1, 2, 3, 2).Value = 3;

                    // 背景色を設定
                    worksheet.Range(1, 2, 3, 2).Style.Fill.BackgroundColor = XLColor.SkyBlue;

                    // 内側に罫線を引く
                    worksheet.Range(1, 2, 3, 2).Style.Border.InsideBorder = XLBorderStyleValues.Thin;

                    // 外側に罫線を引く
                    worksheet.Range(1, 2, 3, 2).Style.Border.OutsideBorder = XLBorderStyleValues.Thin;

                    // SUM関数を使用
                    worksheet.Cell(4, 2).FormulaA1 = "SUM(B1:B3)";

                    // 計算結果を取得
                    var sum = worksheet.Evaluate("SUM(A1:A3)");
                    Console.WriteLine(sum);

                    // 保存
                    workbook.SaveAs(path);
                }
            }
            catch (IOException e)
            {
                System.Console.WriteLine("ファイルが開かれています" + e.ToString());
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.ToString());
            }
        }
    }
}

実行結果

また作成した「test.xlsx」を開いたまま実行すると「IOException」が発生します。

System.IO.IOException: The process cannot access the file 'C:\excel\test.xlsx' because it is being used by another process
ss.
   at System.IO.FileSystem.DeleteFile(String fullPath)
   at System.IO.File.Delete(String path)
   at ClosedXML.Excel.XLWorkbook.SaveAs(String file, SaveOptions options)
   at ClosedXML.Excel.XLWorkbook.SaveAs(String file, Boolean validate, Boolean evaluateFormulae)
   at ClosedXML.Excel.XLWorkbook.SaveAs(String file)