본문 바로가기

[C#] 엑셀 파일로부터 데이터 불러오기

C#
·
2020. 2. 14. 17:05
반응형

C#에서 엑셀 파일을 불러오기 위해서는 Microsoft Excecl Object Library를 참조로 추가해야 합니다.
Microsoft Excecl Object Library 참조 추가 방법은 [C#] 데이터를 엑셀 파일로 저장하기 를 참조하시면 됩니다.

엑셀 파일로부터 불러오기 위한 샘플 데이터로 다음과 같은 데이터를 사용하겠습니다.

샘플 데이터


엑셀 파일을 불러오는 코드는 다음과 같습니다.

using System;
using System.IO;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace ImportExcel
{
    class Program
    {
        static Excel.Application excelApp = null;
        static Excel.Workbook workBook = null;
        static Excel.Worksheet workSheet = null;

        static void Main(string[] args)
        {
            try
            {
                string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);  // 바탕화면 경로
                string path = Path.Combine(desktopPath, "Excel.xlsx");                              // 엑셀 파일 저장 경로

                excelApp = new Excel.Application();                             // 엑셀 어플리케이션 생성
                workBook = excelApp.Workbooks.Open(path);                       // 워크북 열기
                workSheet = workBook.Worksheets.get_Item(1) as Excel.Worksheet; // 엑셀 첫번째 워크시트 가져오기

                Excel.Range range = workSheet.UsedRange;    // 사용중인 셀 범위를 가져오기

                for (int row = 1; row <= range.Rows.Count; row++) // 가져온 행 만큼 반복
                {
                    for (int column = 1; column <= range.Columns.Count; column++)  // 가져온 열 만큼 반복
                    {
                        string str = (string)(range.Cells[row, column] as Excel.Range).Value2;  // 셀 데이터 가져옴

                        Console.Write(str + " ");
                    }
                    Console.WriteLine();
                }

                workBook.Close(true);   // 워크북 닫기
                excelApp.Quit();        // 엑셀 어플리케이션 종료
            }
            finally
            {
                ReleaseObject(workSheet);
                ReleaseObject(workBook);
                ReleaseObject(excelApp);
            }
        }

        /// <summary>
        /// 액셀 객체 해제 메소드
        /// </summary>
        /// <param name="obj"></param>
        static void ReleaseObject(object obj)
        {
            try
            {
                if (obj != null)
                {
                    Marshal.ReleaseComObject(obj);  // 액셀 객체 해제
                    obj = null;
                }
            }
            catch (Exception ex)
            {
                obj = null;
                throw ex;
            }
            finally
            {
                GC.Collect();   // 가비지 수집
            }
        }
    }
}

엑셀 객체를 사용하고 난 후 ReleaseObject(object obj)로 반드시 엑셀 객체를 해제(Release)해 주어야 합니다. workSheet.Cells[row, column]를 사용할 경우 row, column의 인덱스는 0이 아닌 1부터 시작해야 합니다.

셀 가져오는 방법

  • workSheet.Cells[2, 1] : A2셀을 가져옴
  • worksheet.Cells[3,3].Value2 : C3셀의 식 또는 값을 가져옴
  • worksheet.Cells[3,3].Fomula : C3셀의 수식을 가져옴

셀 범위 가져오는 방법

  • workSheet.Range[worksheet.Cells[1, 1], worksheet.Cells[1, 3]]: A1부터 C1까지의 셀을 가져옴
  • workSheet.Range[“A2 : C2”]: A2부터 C2까지의 셀을 가져옴 (엑셀 표현 그대로 사용가능)

소스 코드를 실행하게 되면 지정된 경로로부터 엑셀 파일이 불러와지고 다음과 같은 결과를 확인할 수 있습니다.

실행 결과

반응형
블로그 이미지
Frontend Engineer

댓글