C# Excel 파일 읽기 쓰기

이글에서는 C#을 사용하여 Excel 파일을 열고 데이터를 조작하는 방법에 대해 알아보겠습니다.
C# Excel 파일 읽기 쓰기 등 C# 프로그램으로 Excel 데이터를 관리 할 수 있습니다.

Excel Automation 사용하기

Excel Automation 은 C# .NET과 같은 언어로 작성된 응용 프로그램이 Excel을 프로그래밍 방식으로 제어할 수 있는 과정을 의미합니다. 엑셀에 대한 자동화는 새 워크북을 만들거나 워크북에 데이터를 추가하거나 차트를 만드는 등의 작업을 수행할 수 있게 합니다. 엑셀 및 기타 Microsoft Office 응용 프로그램에서 사용자 인터페이스를 통해 수동으로 수행할 수 있는 작업은 거의 모두 자동화를 통해 프로그래밍 방식으로 수행할 수 있습니다.

만약 Excel 이 설치되지않은 개발 환경이라면 다음글에서 그 방법을 제시합니다.

절차

먼저 Excel 을 조작할 수 있는 라이브러리를 Nuget 을 통해 받아야 합니다.
Microsoft.Office.Interop.Excel 항목을 검색, 선택한 후 설치 합니다.

C# Excel 파일 읽기 쓰기

이제 사용할 준비가 되었습니다.

참조된 DLL을 사용하기 위해 using Microsoft.Office.Interop.Excel;과 같이 Excel 네임스페이스를 참조합니다.

using Excel = Microsoft.Office.Interop.Excel;
와 같이 별칭을 지정하여 사용하시면 더욱 편리하게 사용하실 수 있습니다.

프로그램 코드에서는 Excel Application 객체, Workbook 객체, 그리고 Worksheet 객체를 순서대로 얻은 후에 해당 Worksheet의 Cell이나 Range를 지정하여 데이터를 생성 또는 조작합니다.

작업이 완료된 후에는 Excel 객체들을 Release하여 Excel.exe가 백그라운드에 남지 않도록 해야 합니다.

Marshal.ReleaseComObject 는 관리 코드에서 사용되는 COM 개체의 수명을 명시적으로 제어하는 데 사용됩니다.
이 메서드를 사용하여 리소스에 대한 참조를 보유하는 기본 COM 개체를 적시에 해제해야 합니다.

다음에 그 예제를 살표 보겠습니다.

예제 코드

엑셀 파일 작성 예제

using System.Collections.Generic;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace ExcelTest
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> testData = new List<string>(){ "A1 Haro", "A2 Studio", "A3 Test", "A4 Code" };

            Excel.Application excelApp = null;
            Excel.Workbook wb = null;
            Excel.Worksheet ws = null;

            try
            {
                // Excel 첫번째 워크시트 가져오기                
                excelApp = new Excel.Application();
                wb = excelApp.Workbooks.Add();
                ws = wb.Worksheets.get_Item(1) as Excel.Worksheet;

                // 데이타 넣기
                int r = 1;
                foreach (var d in testData)
                {
                    ws.Cells[r, 1] = d;
                    r++;
                }

                // 엑셀파일 저장
                wb.SaveAs("test.xls", Excel.XlFileFormat.xlWorkbookNormal);
                wb.Close(true);
                excelApp.Quit();
            }
            finally
            {
                Marshal.ReleaseComObject(ws);
                Marshal.ReleaseComObject(wb);
                Marshal.ReleaseComObject(excelApp);
            }
        }
    }
}

위의 예제 코드를 통해 C#에서 Excel 파일 생성 방법을 자세히 알아볼 수 있습니다.

excelApp = new Excel.Application();
wb = excelApp.Workbooks.Add();
ws = wb.Worksheets.get_Item(1) as Excel.Worksheet;

위 구문이 Excel 파일을 열고 Worksheet를 생성하는 작업입니다.

ws.Cells[ROW,COLUMN] = value

위 구문을 통해서 특정 Column, Row 에 해당하는 cell 에 값을 쓸수 있습니다.

wb.SaveAs("test.xls", Excel.XlFileFormat.xlWorkbookNormal);
wb.Close(true);
excelApp.Quit();

이제 작성된 Excel 파일을 test.xls 로 저장하고 워크북을 닫고 엑셀을 종료 합니다.

Marshal.ReleaseComObject(ws);
Marshal.ReleaseComObject(wb);
Marshal.ReleaseComObject(excelApp);

위 코드로 사용되어진 COM 객체를 닫아 주어야 합니다.

그 결과를 보도록 하겠습니다.

C# Excel 파일 읽기 쓰기

엑셀 파일 읽기 예제

이제 위에서 작성된 파일을 읽어보도록 하겠습니다.

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Excel.Application excelApp = null;
            Excel.Workbook wb = null;
            Excel.Worksheet ws = null;

            try
            {
                // Excel 첫번째 워크시트 가져오기
                excelApp = new Excel.Application();
                wb = excelApp.Workbooks.Open("test.xls");
                ws = wb.Worksheets.get_Item(1) as Excel.Worksheet;

                // Excel 워크시트 사용중인 범위 가져오기 
                Excel.Range xlRange = ws.UsedRange;
                int rowCount = xlRange.Rows.Count;
                int colCount = xlRange.Columns.Count;


                // 모든 셀을 출력
                for (int i = 1; i <= rowCount; i++)
                {
                    for (int j = 1; j <= colCount; j++)
                    {
                        Console.WriteLine(ws.Cells[i, j].Value2.ToString());
                    }
                }
                wb.Close(true);
                excelApp.Quit();
            }
            finally
            {
                Marshal.ReleaseComObject(ws);
                Marshal.ReleaseComObject(wb);
                Marshal.ReleaseComObject(excelApp);
            }
        }
    }
}

위 구문이 간단한 엑셀 파일을 열어서 화면에 보여주는 예제 코드입니다.

wb = excelApp.Workbooks.Open("test.xls");

위의 파일 작성 대비 다른점은 Add 대신 Open 한다는것입니다.

Excel.Range xlRange = ws.UsedRange;
int rowCount = xlRange.Rows.Count;
int colCount = xlRange.Columns.Count;

위의 구문이 사용되고 있는 범위를 얻을 수 있습니다.

ws.Cells[i, j].Value2.ToString()

범위를 for 문으로 값을 출력합니다.

A1 Haro
A2 Studio
A3 Test
A4 Code

위의 내용이 출력물입니다.
앞절에 저장했던 파일 그대로 읽어서 출력하도록 하였습니다.

결론

간단히 Excel 을 열고 쓰는 예제를 통해서 C# 에서 Excel을 사용 하는 코드를 선보였습니다.
이제 C# 에서 excel 파일을 자유자재로 컨트롤 하시길 바랍니다.

Leave a Comment