반응형

C#으로 엑셀 열기, 저장, 닫기

 

 

1. 목표

  • 엑셀을 사용 할 수 있도록 참조 추가

  • 엑셀 인스턴스 생성

  • 워크북 생성

  • 내용 저장 ( Save(), SaveAs() )

  • 엑셀 프로그램 닫기 (엑셀 릴리즈)

 

2. 전체 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
 
namespace chapter_01
{
    class Program
    {
        static void Main(string[] args)
        {
            Application excelapp = new Application();
            Workbook wb = excelapp.Workbooks.Add();
            
 
            wb.SaveAs(Filename: @"c:\test\123.xlsx");
 
 
            wb.Close();
            excelapp.Quit();
 
            Marshal.ReleaseComObject(wb);
            Marshal.ReleaseComObject(excelapp);
        }
    }
}
 
cs

 

 

3. 뜯어 보기

1
2
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
cs

using Microsoft.Office.Interop.Excel;

  > 엑셀 사용을 위한 참조 추가

     (참조 - COM - Microsoft Excel 16.0 Object Library 체크)

  > 참조 추가는 앞선 글 참고

 

using System.Runtime.InteropServices;

  > 사용한 엑셀 객체들을 해제(Release)를 해주기 위한 참조

 

 

1
2
Application excelapp = new Application();
Workbook wb = excelapp.Workbooks.Add();
cs

Application excelapp = new Application();

  > 엑셀 사용을 위한 인스턴스 생성

 

Workbook wb = excelapp.Workbooks.Add();

  > 엑셀 파일 생성 (워크북 생성)

 

 

1
wb.SaveAs(Filename: @"c:\test\123.xlsx");
cs

wb.SaveAs(Filename: @"c:\test\123.xlsx");

  > 다른 이름으로 저장하기

  > Filename 뒤에 경로와 확장자명 입력

  > wb.Save()의 경우 현재 파일에 저장 (덮어쓰기)

 

 

1
2
3
4
5
wb.Close();
excelapp.Quit();
 
Marshal.ReleaseComObject(wb);
Marshal.ReleaseComObject(excelapp);
cs

wb.Close();

  > 워크 북 닫기

excelapp.Quit();

  > 엑셀 닫기

 

Marshal.ReleaseComObject(wb);

  > 워크북 닫기 (릴리즈)

Marshal.ReleaseComObject(excelapp);

  > 엑셀 닫기 (릴리즈)

 

* 이중으로 닫는(릴리즈) 이유는 Close(), Quit()만으로 닫히지 않는(해제되지 않는) 객체들이 발생한다.

  (직접 실행되는 것이 아닌 백그라운드에서 실행되어 있다)

  그래서 using System.Runtime.InteropServices;를 참조하여 한번 더 객체를 해제시켜 준다.

반응형

+ Recent posts