-
C# 엑셀파일 가져오기 using Microsoft.Office.Interop.Excel (DataGrdiVeiw에 바인딩 포함)닷넷/WinForms 2018. 1. 10. 13:21반응형
2017/05/22 - [프로그래밍/C#] - C# 엑셀파일 가져오기 using OleDb
이전 글에서는 OleDb를 이용해 엑셀파일을 불러왔다면
이번 글은 엑셀 라이브러리를 이용해 엑셀파일을 불러 오는 방법이다.
먼저 엑셀 라이브러리를 추가한다.
1) 참조에서 오른쪽 마우스클릭 -> 참조 추가 클릭
2) 어셈블리에서 확장에 보면 Microsoft.Office.Interop.Excel 이 있다.
버전 별로 여러 개가 있다면 그 중에 하나만 선택 하고 확인을 눌러 추가해준다.
없다면 엑셀이 설치되어 있지 않은 것이다. 엑셀을 설치하거나 dll 파일을 구한다.
3) 소스 파일에 using Microsoft.Office.Interop.Excel; 를 입력한다.
4) 그러나 System에 선언되어 있는 클래스나 메소드와 똑같은 이름들을 가지고 있는 것들이 있어서 모호한 참조 오류가 발생한다.
5) 따라서 나중에 엑셀파일을 불러올 때 Microsoft.Office.Interop.Excel을 참조하는 걸 알리기 위해
짧은 이름으로 지정할 변수 이름을 추가 입력한다.
6) 코드
// 이 코드에는 엑셀파일에서 불러온 데이터를 데이터그리드뷰(DataGridView)에 바인딩하는 것도 포함되어 있다.private void btnOpenExcel_Click(object sender, EventArgs e){// 엑셀 변수 선언Excel.Application xlApp = null;Excel.Workbook xlWorkbook = null;Excel.Worksheet xlWorksheet = null;// 파일 선택OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = "Excel File (*.xlsx)|*.xlsx|Excel File 97~2003 (*.xls)|*.xls|All Files (*.*)|*.*";if (ofd.ShowDialog() == DialogResult.OK){try{// 데이터그리드뷰 클리어dgvList.Columns.Clear();// 엑셀데이터를 담을 데이터테이블 선언DataTable dt = new DataTable();// 엑셀 변수들 초기화xlApp = new Excel.Application();xlWorkbook = xlApp.Workbooks.Open(ofd.FileName);xlWorksheet = (Excel.Worksheet)xlWorkbook.Worksheets.get_Item(1); // 첫 번째 시트// 시트에서 범위 설정// UsedRange는 사용된 셀 모두이므로// 범위를 따로 지정하려면// xlWorksheet.Range[xlWorksheet.Cells[시작 행, 시작 열], xlWorksheet.Cells[끝 행, 끝 열]]Excel.Range range = xlWorksheet.UsedRange;// 2차원 배열에 담기object[,] data = range.Value;// 데이터테이블에 엑셀 칼럼만큼 칼럼 추가for (int i=1; i<=range.Columns.Count; i++){dt.Columns.Add(i.ToString(), typeof(string));}// 데이터테이블에 2차원 배열에 담은 엑셀데이터 추가for (int r = 1; r < range.Rows.Count; r++){DataRow dr = dt.Rows.Add();for (int c = 1; c < range.Columns.Count; c++){dr[c-1] = data[r, c];}}xlWorkbook.Close(true);xlApp.Quit();// 데이터그리드뷰에 데이터테이블 바인딩dgvList.DataSource = dt;}catch (Exception ex){MessageBox.Show(ex.Message);}finally{// 사용이 끝난 엑셀파일 ReleaseReleaseExcelObject(xlWorksheet);ReleaseExcelObject(xlWorkbook);ReleaseExcelObject(xlApp);}}}private void ReleaseExcelObject(object obj){try{if (obj != null){Marshal.ReleaseComObject(obj);obj = null;}}catch (Exception ex){obj = null;throw ex;}finally{GC.Collect();}}cs 반응형'닷넷 > WinForms' 카테고리의 다른 글
C# DateTimePicker 기본값 설정하기 (0) 2018.03.27 C# 간단하게 구현한 CheckBox ComboBox (with CheckedListBox) (1) 2018.03.15 C# DataGridView를 Database에 동기화하는 방법 (InsertCommand, UpdateCommand, DeleteCommand 사용하기) (0) 2017.10.20 C# CrossThread 오류가 발생할 때 (0) 2017.08.07 C# 프로그램 실행 중복방지 (0) 2017.04.26