개발 공부/C# 학습

[C# 학습] 엑셀 파일 생성 및 저장하기(코드, Marshal 클래스, 에러 해결)

아밍나 2022. 10. 20. 17:26
728x90

※ 해당 게시글의 코드는 직접 작성한 코드가 아닙니다.

참조한 사이트는 하단에 기재하였습니다.

해당 코드로 실습 후 발견한 에러 해결 과정만 제가 작성하였으니 참고 바랍니다.


1) 실습 코드

using Microsoft.Office.Interop.Excel; //엑셀 사용을 위한 참조 추가
using System.Runtime.InteropServices; //사용할 엑셀 객체들을 해제(release)해주기 위한 참조 추가

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            //엑셀 사용을 위한 인스턴스 생성
            Application excelApp = new Application(); 
            
            //엑셀 파일 생성(워크북 생성)
            Workbook wb = excelApp.Workbooks.Add();
            //다른 이름으로 저장하기 d 드라이브의 workplace라는 폴더에 저장.
            wb.SaveAs(Filename: @"d:\workplace\123.xlsx"); 
            /*
            - Filename 뒤에 경로와 파일이름, 확장자명 입력
            - wb.Save()의 경우 현재 파일에 저장(덮어쓰기)
            */
            wb.Close();
            excelApp.Quit();
            
            Marshal.ReleaseComObject(wb); //워크북 닫기(릴리즈)
            Marshal.ReleaseComObject(excelApp); //엑셀 닫기(릴리즈)
            /*
            - 릴리즈(이중으로 닫는) 이유는 
            	Close(), Quit()만으로 닫히지 않는(해제되지 않는) 객체들이 발생한다.
            	-> 백그라운드에서 실행된 객체
              그래서 한 번 더 객체를 해제(Release)하는 것이다.
            */
        }
    }
}

Marshal 클래스

관리되지 않는 메모리를 할당, 메모리 블록 복사, 관리되는 형식을 관리되지 않는 형식으로 변환.

2) 에러 해결

1. Office에 빨간 줄

메뉴 프로젝트(Project) -> 참조 추가(Add Reference) -> COM

 

Microsoft Office Object Library

 

체크박스 표시 후 확인 버튼을 누르면 빨간 줄이 사라짐.

2. Application, new Application()에 빨간 줄

오류 메시지)
Application은 'Microsoft.Office.Interop.Excel.Application' 및 'System.Windows.Forms.Application' 사이에 모호한 참조입니다.

원인)

: 프로젝트를 생성할 때 Windows Forms 앱으로 생성해서 그런 것.

엑셀 사용을 위한 참조 using Microsoft.Office.Interop.Excel; 와 폼 사용을 위한 참조 using System.Windows.Forms; 중 어디에서 Application을 사용할지 모호하기 때문.

해결 방법)

① 윈폼을 사용해야 하는 경우

 

수정 전)

Application excelapp = new Application();

수정 후)

Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application();

 

② 윈폼을 사용할 필요 없는 경우

using System.Windows.Forms; 제거

 

 

 

 

 


참조 사이트)

https://hostramus.tistory.com/91

 

C# 엑셀(Excel) 01. C#으로 엑셀 열기, 저장, 닫기

C#으로 엑셀 열기, 저장, 닫기 1. 목표 엑셀을 사용 할 수 있도록 참조 추가 엑셀 인스턴스 생성 워크북 생성 내용 저장 ( Save(), SaveAs() ) 엑셀 프로그램 닫기 (엑셀 릴리즈) 2. 전체 코드 1 2 3 4 5 6 7 8

hostramus.tistory.com

 

728x90
반응형