엑셀 파일을 열고 데이터를 가져오는 것 까지 정리합니다.
절차는 크게 보면 아래 와 같습니다.
1. 파일열기
2. 시트목록 추출
3. 해당시트로 부터 데이터 추출
1. 파일열기
openDlg1.FileName = ""; // 변수선언 string sFileName = ""; OleDbConnection oleConn = new OleDbConnection(); // 파일 읽기 다이얼로그 호출. 결과가 취소인 경우 여기서 실행을 멈춘다. if (this.openDlg1.ShowDialog() == DialogResult.Cancel) { return; } // 파일 읽기 다이얼로그로 부터 파일경로 획득 if (!this.openDlg1.FileName.Equals("")) { sFileName = openDlg1.FileName; } else { return; } // xlsx와 xls의 연결 방법이 다르므로 구분하여 적용. if (sFileName.IndexOf("xlsx") >= 0) { // 여기서 오류 날 경우, 오피스 2007 시스템 드라이버를 설치한다. // https://www.microsoft.com/ko-kr/download/details.aspx?id=23734 oleConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + sFileName + @";Extended Properties=Excel 12.0"; } else { oleConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + sFileName + "; Extended Properties=Excel 8.0;"; } // 오픈~ oleConn.Open(); |
- openfiledialog 를 사용하여 파일을 선택한다.
- 코드 내 주석에도 있지만, Open() 시 컨넥션 스트링 어쩌고 오류나는 경우가 있다. https://www.microsoft.com/ko-kr/download/details.aspx?id=23734 주소로 부터 시스템 드라이버를 다운받아 설치한다.
2. 시트목록 추출
// 시트가 여러개 존재할 경우 모든 시트 목록을 만든다. DataTable sheetListDT = oleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); string sheetName = ""; // 시트 목록 돌면서 처리할 내용이 있다면 추가한다. (예: 특정 단어가 포함된 시트 제외 한다던가 뭐 그런 것들...) for (int i = 0; i < sheetListDT.Rows.Count; i++) { // 시트명 표시 //sheetName = sheetListDT.Rows[i]["TABLE_NAME"].ToString(); //MessageBox.Show(sheetName); // sheetListDT.Rows[i].Delete(); // 예: 시트 제거 } // 변경 내용 반영 sheetListDT.AcceptChanges(); |
- 시트 목록을 구한다. 일부 필요없는 시트가 있다면 여기서 걸러낸다.
3. 시트로 부터 데이터를 조회
// 시트로 부터 데이터 조회 //DataSet tmpDS = new DataSet(); string sqlStr = ""; for (int i = 0; i < sheetListDT.Rows.Count; i++) { sheetName = sheetListDT.Rows[i]["TABLE_NAME"].ToString(); sqlStr = "SELECT * FROM [" + sheetName + "]"; OleDbCommand oleCom = new OleDbCommand(); oleCom.CommandType = CommandType.Text; oleCom.CommandText = sqlStr; oleCom.Connection = oleConn; OleDbDataAdapter oleAdt = new OleDbDataAdapter(); oleAdt.SelectCommand = oleCom; DataTable tmpDT = new DataTable(); oleAdt.Fill(tmpDT); tmpDT.TableName = sheetName; //tmpDS = StringMerge(tmpDS, tmpDT, 10); dataGridView1.DataSource = tmpDT; } |
- 테이터를 DataTable 에 채워 넣는다.
- dataGridView 컨트롤에 뿌리는 것으로 샘플코드는 종료~!!
결과 샘플
실행 예
사용된 엑셀 데이터