C# Excel 설치 없이 Excel 파일 작업하기

이글에서는 Excel 설치 없이 Excel 파일을 다룹니다. xlsx는 Microsoft Excel에서 사용되는 오픈 XML 스프레드시트 파일 형식의 파일 확장자입니다. Office Open XML 형식을 기반으로 합니다.
C# 으로 Excel 설치 없이 Excel 파일을 작성 및 작업하도록 하겠습니다.

Excel 설치시 Excel 작업하기

만약 Excel 이 설치되어져 있고 COM 에 등록되어져 있다면 다음 글에서 더 쉽게 Excel 을 작업 하실 수 있습니다.

ClosedXML 소개

ClosedXML은 Excel 2007+ (.xlsx, .xlsm) 파일을 읽고 조작하고 쓰기 위한 .NET 라이브러리입니다.
Nuget 패키지 관리 창을 열고 다음 패키지를 추가 합니다.

C# Excel 설치 없이 Excel 파일 작업하기

프로젝트에 패키지를 추가합니다.

Excel 예제

Excel 단순 예제

첫 번째 예제에서는 ClosedXML로 새로운 xlsx 파일을 만드는 방법을 보여줍니다.

using System;
using ClosedXML.Excel;

class Program
{
    static void Main(string[] args)
    {
        using (var wbook = new XLWorkbook())
        { 
            var ws = wbook.Worksheets.Add("Sheet1");
            ws.Cell("A1").Value = "150";
            wbook.SaveAs("simple.xlsx");
        }
    }
}

새 Excel 파일을 만들고 셀에 값을 작성합니다.

using var wbook = new XLWorkbook();

새로운 XLWorkbook이 생성됩니다.

var ws = wbook.Worksheets.Add("Sheet1");

워크북에 새 시트를 추가합니다.

ws.Cell("A1").Value = "150";

열(column):A 행(row):1 인 “A1” 셀에 값을 작성합니다.

wbook.SaveAs("simple.xlsx");

워크북은 SaveAs 메서드를 사용하여 저장됩니다.

Excel 셀 편집 예제

셀은 행(row)과 열(column) 교차점입니다. 각 셀은 열 문자와 행 번호로 구성된 고유한 주소를 가지고 있습니다. 예를 들어, 시트의 좌측 상단에 있는 첫 번째 셀의 주소는 A1입니다.

using System;
using ClosedXML.Excel;

class Program
{
    static void Main(string[] args)
    {
        using (var wbook = new XLWorkbook())
        {
            var ws = wbook.AddWorksheet("Sheet1");

            ws.FirstCell().Value = 150;

            ws.Cell(2, 2).Value = "website name is harostudio";
            ws.Cell("A3").SetValue("하로스튜디오").SetActive();

            ws.Columns().AdjustToContents();

            wbook.SaveAs("data.xlsx");
        }
    }
}

출력된 Excel 은 다음과 같습니다.

C# Excel 설치 없이 Excel 파일 작업하기

이 예에서는 셀 작업을 수행합니다.

ws.FirstCell().Value = 150;

시트의 첫 번째 셀에 대한 참조를 가져옵니다. FirstCellValue 속성을 사용하여 값을 150으로 설정합니다.

ws.Cell(2, 2).Value = "website name is harostudio";

셀을 참조하는 또 다른 방법은 행 및 열 번호를 매개변수로 사용하는 오버로드된 메서드를 사용하는 것입니다. Cell 메서드를 사용합니다.

ws.Cell("A3").SetValue("하로스튜디오").SetActive();

주소(A3) 셀에 값(“하로스튜디오”)을 씁니다. SetActive()는 현재 포커스를 A3에 두겠다는 의미입니다. 나중에 Excel 프로그램으로 문서를 열면 A3에 포커스 되어 있습니다.

ws.Column(2).AdjustToContents();

두 번째 열의 너비를 내용에 맞게 조정합니다. “website name is harostudio”라는 값이 완전히 표시됩니다.

C# Excel 파일 읽기 예제

다음 예에서는 이전에 생성된 Excel 파일에서 읽습니다.

using System;
using ClosedXML.Excel;

class Program
{
    static void Main(string[] args)
    {
        using (var wbook = new XLWorkbook("simple.xlsx"))
        {
            var ws1 = wbook.Worksheet(1);
            var data = ws1.Cell("A1").GetValue<string>();

            Console.WriteLine(data);
        }
    }
}

출력은 다음과 같습니다.

150

이 예에서는 셀에서 값을 읽습니다.

using var wbook = new XLWorkbook("simple.xlsx");

워크북을 엽니다.

var ws1 = wbook.Worksheet(1); 

첫 번째 시트로 이동합니다.

var data = ws1.Cell("A1").GetValue<string>();

GetValue() 메서드를 사용하여 A1 셀의 값을 읽습니다.

Excel 스타일 적용

스타일은 속성을 통해 적용할 수 있습니다.

using System;
using ClosedXML.Excel;

class Program
{
    static void Main(string[] args)
    {
        using (var wbook = new XLWorkbook())
        {
            var ws = wbook.Worksheets.Add("Sheet1");

            var c1 = ws.Column("A");
            c1.Width = 25;

            var c2 = ws.Column("B");
            c2.Width = 15;

            ws.Cell("A3").Value = "HaroStudio";
            ws.Cell("B2").Value = "150";
            ws.Cell("B5").Value = "C# ClosedXml";

            ws.Cell("A3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
            ws.Cell("A3").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
            ws.Cell("A3").Style.Font.Italic = true;

            ws.Cell("B2").Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
            ws.Cell("B5").Style.Font.FontColor = XLColor.Red;

            wbook.SaveAs("styled.xlsx");
        }
    }
}

출력은 다음과 같습니다.

C# Excel 설치 없이 Excel 파일 작업하기

이 예에서는 셀에 스타일을 적용합니다.

var c1 = ws.Column("A");
c1.Width = 25;

var c2 = ws.Column("B");
c2.Width = 15;

A 및 B 열의 너비를 설정합니다.

ws.Cell("A3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Cell("A3").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
ws.Cell("A3").Style.Font.Italic = true;

A3 셀에서 텍스트를 가로 및 세로 중앙 정렬하고 이탤릭체로 설정합니다.

ws.Cell("B2").Style.Border.OutsideBorder = XLBorderStyleValues.Thin;

B2 셀에 얇은 테두리를 설정합니다.

ws.Cell("B5").Style.Font.FontColor = XLColor.Red;

B5 셀의 글꼴 색상을 빨간색으로 설정합니다.

Excel 범위

범위는 하나 이상의 셀 그룹입니다. 범위 주소는 상단 왼쪽 셀 주소와 하단 오른쪽 주소를 콜론으로 구분하여 지정합니다.

단일 범위는 Range(“D2:E2”) 처럼 : 를 사용하여 범위를 지정합니다.

여러 범위는 Ranges(“C5, F5:G8”) 처럼 인자로 여러 범위를 , 으로 구분하여 생성합니다.

using System;
using ClosedXML.Excel;

class Program
{
    static void Main(string[] args)
    {
        using (var wbook = new XLWorkbook())
        {
            var ws = wbook.Worksheets.Add("Sheet1");

            ws.Range("D2:E2").Style.Fill.BackgroundColor = XLColor.Gray;
            ws.Ranges("C5, F5:G8").Style.Fill.BackgroundColor = XLColor.Gray;

            var rand = new Random();
            var range = ws.Range("C10:E15");

            foreach (var cell in range.Cells())
            {
                cell.Value = rand.Next();
            }

            ws.Column("C").AdjustToContents();
            ws.Column("D").AdjustToContents();
            ws.Column("E").AdjustToContents();

            wbook.SaveAs("ranges.xlsx");
        }
    }
}

출력은 다음과 같습니다.

C# Excel 설치 없이 Excel 파일 작업하기

이 예에서는 범위 작업을 수행합니다.

ws.Range("D2:E2").Style.Fill.BackgroundColor = XLColor.Gray;

D2:E2 범위의 배경색을 변경합니다.

ws.Ranges("C5, F5:G8").Style.Fill.BackgroundColor = XLColor.Gray;

여기서 두 개의 범위의 배경색을 변경합니다.

var rand = new Random();
var range = ws.Range("C10:E15");

foreach (var cell in range.Cells())
{
    cell.Value = rand.Next();
}

범위의 각 셀에 랜덤 값을 설정합니다. Cells 메서드를 사용하여 범위의 셀을 가져옵니다.

Excel 셀 병합

셀을 병합하려면 .Merge 메서드를 사용합니다.

using System;
using ClosedXML.Excel;

class Program
{
    static void Main(string[] args)
    {
        using (var wbook = new XLWorkbook())
        {
            var ws = wbook.Worksheets.Add("Sheet1");

            ws.Cell("A1").Value = "HaroStudio";
            ws.Cell("A1").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
            ws.Cell("A1").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;

            ws.Range("A1:B2").Merge();

            wbook.SaveAs("merged.xlsx");
        }
    }
}

출력은 다음과 같습니다.

C# Excel 설치 없이 Excel 파일 작업하기

네 개의 셀을 하나로 병합합니다.

ws.Range("A1:B2").Merge();

범위 A1부터 B2까지의 셀을 병합합니다.

Excel 정렬

Sort 메서드를 사용하여 정렬할 수 있습니다.

using System;
using ClosedXML.Excel;

class Program
{
    static void Main(string[] args)
    {
        using (var wbook = new XLWorkbook())
        {
            var ws = wbook.Worksheets.Add("Sheet1");

            var rand = new Random();
            var range = ws.Range("A1:A15");

            foreach (var cell in range.Cells())
            {
                cell.Value = rand.Next(1, 100);
            }

            ws.Sort("A");

            wbook.SaveAs("sorted.xlsx");
        }
    }
}

출력은 다음과 같습니다.

C# Excel 설치 없이 Excel 파일 작업하기

A 열에 대해 15개의 랜덤 값을 추가합니다. 그런 다음 .Sort 메서드를 사용하여 열을 정렬합니다.

Excel 자동필터

정렬

using var wb = new XLWorkbook();
var ws = wb.AddWorksheet();
var range = ws.Cell("B3").InsertData(new[]
{
    new object[]{ "Pastry",    "Sold", "Margin" },
    new object[]{ "Cake",      14,     0.25 },
    new object[]{ "Croissant", 15,     0.60 },
    new object[]{ "Fig Roll",  56,     0.50 },
    new object[]{ "Waffle",    74,     0.60 },
});

// Sort by margin
range.SetAutoFilter().Sort(3, XLSortOrder.Descending);
wb.SaveAs(@"c:\temp\issues\autofilter-sort-example.xlsx");

결과는 다음과 같습니다.

C# Excel 설치 없이 Excel 파일 작업하기

레귤러 필터

using ClosedXML.Excel;

using var wb = new XLWorkbook();
var ws = wb.AddWorksheet();
ws.Column("B").Width = 12;
var range = ws.Cell("B3").InsertData(new object[]
{
    "Header",
    "Text",
    7,
    new DateTime(2020, 1, 5),
    new DateTime(2020, 1, 14),
    "7",
    new DateTime(2020, 2, 5)
});

range.SetAutoFilter().Column(1).AddFilter("7");

wb.SaveAs("autofilter-filter-regular-example.xlsx");

결과물은 다음과 같습니다.

C# Excel 설치 없이 Excel 파일 작업하기

그밖의 기능들

공식 WebSite를 통해서 각 기능들을 확인하실 수 있습니다.

ClosedXML — ClosedXML 0.102.0 documentation

대표적으로 다음과 같은 함수들이 있습니다.

  1. PivotTables
  2. Protection
  3. FormulaA1
  4. Evaluate
  5. CellsUsed

결론

이글에서는 C# 으로 Microsoft.Office.Excel 설치 없이 Excel 파일 .xlsx 파일을 다루는 방법에 대해서 다뤄보았습니다.

Leave a Comment