소프트웨어/C# & ASP.NET

C# and Excel (reading)

falconer 2009. 8. 25. 08:34

이전 포스트 였던 C#을 이용한 엑셀(쓰기) C# and Excel (writing) 에서 번 포스팅 에서는 엑셀(읽기)를 해보겠습니다.

이전 포스트와 같은 환경 Microsoft Visual Studio 2008 + Microsoft Office Excel 2007 이며 처음 참조추가 하는 부분은 같습니다. 혹시 이 글을 처음 보신다면 이전 글을 먼저 확인해 보세요^^.

 

역시 이번 포스팅도 상당히 간단하게 끝납니다. 역시 사용법을 몰랐을 뿐이죠…

01.string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\sample.xlsx;Extended Properties=\"Excel 12.0;HDR=YES;\"";
02.OleDbConnection excelConnection = new OleDbConnection(conStr);
03.excelConnection.Open();
04. 
05.string strSQL = "SELECT * FROM [Sheet1$]";
06.OleDbCommand dbCommand = new OleDbCommand(strSQL, excelConnection);
07.OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand);
08. 
09.DataTable dTable = new DataTable();
10.dataAdapter.Fill(dTable);
11. 
12.dataGridView_excel_data.DataSource = dTable;
13. 
14.// dispose used objects
15.dTable.Dispose();
16.dataAdapter.Dispose();
17.dbCommand.Dispose();
18. 
19.excelConnection.Close();
20.excelConnection.Dispose();

1번째 줄에서는

Provider=Microsoft.ACE.OLEDB.12.0; 오피스 버전에 영향을 받습니다.
Data Source=c:\sample.xlsx; 파일경로 입니다.
Extended Properties="Excel 12.0;HDR=YES"; 엑셀을 가르키며, HDR엑셀 데이터의 첫번째 row 를 columnname 으로 지정할지 하지 않을지 결정하게됩니다. YES 는 지정입니다.

2~11번째는 OleDb 커넥,명령 등입니다.

12번째 줄은 폼에서 생성한 DataGridView에 DataSource로 dTable 을 지정하는 부분입니다. 이부분을 지나게 되면 폼에서 DataGridView에 내용이 채워지게 됩니다.

14~20번째 는 OleDb 커넥 종료와 Objects 들을 Dispose 하게 됩니다.

 

1번째 줄의 HDR=YES or NO 를 통해 어떻게 바뀌는지 확인해 보겠습니다.

우선 Excel File 윈 원본 데이터를 먼저 보겠습니다.

 

HDR=YES 로 설정한 경우는 아래와 같이 DataGridView 에 컬럼 제목으로 들어가게 됩니다.

 

반면 HDR=NO 로 설정하게 되면 컬럼명은 기본 셋팅값으로 바뀌고 원하던 바로 되지 않고 제목까지 데이터 쪽으로 내려가 버립니다.

 

이제부터는 원하는 부분을 읽어보도록 하겠습니다. (DataGridView 내용에서)

 

1.//DataGridView 에서 Rows 를 얻어옵니다.
2.DataGridViewRowCollection rowCollection = dataGridView_excel_data.Rows;
3.string getStr = rowCollection[1].Cells[3].Value.ToString();

 

row는 열을 가리키며 가로줄 입니다. 1줄에서 데이터그리드로 부터 Rows 를 얻어와 컬렉션에 집어 넣습니다. 이렇게 되면 rowCollection 을 통해 내용을 얻어 올 수 있습니다. 그리하여 다음줄에 인덱스연산을 통해 원하는 부분의 Value 를 얻어 올 수 있습니다.

 

어때요 참 쉽죠?ㅋ

 

또 한번의 간단한 포스팅이 끝났네요^^ㅎ 다음 포스팅에서는 인쇄 작업을 해보겠습니다.



출처 : http://dklee.net/46