카테고리:

2 분 소요

Nuget 패키지 추가

C#에서는 ‘Microsoft.Office.Interop.Excel’를 참조하면 엑셀 파일을 불러들여서 읽고 쓰기를 수행할 수 있다.

사용 방법은 프로젝트 생성 → Nuget 패키지 관리 → Microsoft.Office.Interop.Excel 선택

Nuget 패키지 화면

소스 코드

using System.IO;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
namespace CsharpUseExcel {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

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

        private void button1_Click(object sender, EventArgs e) {
            try {
                String filepath = ShowFileOpenDialog();
                if (filepath != null) {
                    ap = new Excel.Application();
                    wb = ap.Workbooks.Open(filepath, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
                    ws = wb.Worksheets.get_Item("과일");
                    ap.Visible = false;

                    String[] 과일이름 = "" + ws.get_Range("B2:B3").Value;
                    Console.WriteLine(과일이름[0] + " " + 과일이름[1]);

                    /*메모리 할당 해제*/
                    DeleteObject(ws);
                    DeleteObject(wb);
                    ap.Quit();
                    DeleteObject(ap);
                    /*메모리 할당 해제*/
                }
            } catch (Exception ex) {
                MessageBox.Show("에러" + ex.Message, "에러!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void DeleteObject(object obj) {   // 메모리 해제를 위한 사용자 정의 함수
            try {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            } catch (Exception ex) {
                obj = null;
                MessageBox.Show("메모리 할당을 해제하는 중 문제가 발생하였습니다." + ex.ToString(), "경고!");
            } finally {
                GC.Collect();
            }
        }

    }
}

위 소스를 보면 FileDialog로 파일의 경로를 가져오고 ‘과일’이라는 워크시트를 열어 ‘B2:B3’구역의 값을 String[]인 과일 이름에 담에 출력하는 로직이다.

워크시트를 설명하는 그림

워크시트 명은 엑셀 파일의 이름이 아닌 엑셀 파일 내의 구역 이름을 뜻한다.

값을 불러올 때 쓸 때 둘 다 ‘get_Range().Value’를 사용한다.

불러올 땐 String tmp = get_Range(“A1”).Value;

쓸 땐 get_Range(“A1”).Value = “사과”;

태그: Application, csharp, Excel, get_Range, Microsoft.Office.Interop.Excel, workbook, worksheet, 엑셀, 워크시트, 읽고쓰기

업데이트: