이전 포스트 였던 C#을 이용한 엑셀(쓰기) C# and Excel (writing) 에서 이 번 포스팅 에서는 엑셀(읽기)를 해보겠습니다.
이전 포스트와 같은 환경 Microsoft Visual Studio 2008 + Microsoft Office Excel 2007 이며 처음 참조추가 하는 부분은 같습니다. 혹시 이 글을 처음 보신다면 이전 글을 먼저 확인해 보세요^^.
역시 이번 포스팅도 상당히 간단하게 끝납니다. 역시 사용법을 몰랐을 뿐이죠…
string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\sample.xlsx;Extended Properties=""Excel 12.0;HDR=YES;"""; OleDbConnection excelConnection = new OleDbConnection(conStr); excelConnection.Open(); string strSQL = "SELECT * FROM [Sheet1$]"; OleDbCommand dbCommand = new OleDbCommand(strSQL, excelConnection); OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand); DataTable dTable = new DataTable(); dataAdapter.Fill(dTable); dataGridView_excel_data.DataSource = dTable; // dispose used objects dTable.Dispose(); dataAdapter.Dispose(); dbCommand.Dispose(); excelConnection.Close(); 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 내용에서)
//DataGridView 에서 Rows 를 얻어옵니다. DataGridViewRowCollection rowCollection = dataGridView_excel_data.Rows; string getStr = rowCollection[1].Cells[3].Value.ToString();
row는 열을 가리키며 가로줄 입니다. 1줄에서 데이터그리드로 부터 Rows 를 얻어와 컬렉션에 집어 넣습니다. 이렇게 되면 rowCollection 을 통해 내용을 얻어 올 수 있습니다. 그리하여 다음줄에 인덱스연산을 통해 원하는 부분의 Value 를 얻어 올 수 있습니다.
어때요 참 쉽죠?ㅋ
또 한번의 간단한 포스팅이 끝났네요^^ㅎ 다음 포스팅에서는 인쇄 작업을 해보겠습니다.
잘 봤습니다.
ReplyDelete그런데 저는 첫번째 열을 적어넣으면 오류가 뜨는군요.
쌍따옴표가 역슬러쉬 다음에 나와서, 문장으로 인식을 못하네요(땀)
@龍牙 - 2009/09/10 17:48
ReplyDeletestring conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\sample.xlsx;Extended Properties=""Excel 12.0;HDR=YES;""";
이렇게 한번 해보세요^^ㅎ
@龍牙 - 2009/09/10 17:48
ReplyDelete카피하면서 문제가 있었던거 같네요
저도 MSDN보고 어떻게 처리 했네요.^^
ReplyDelete답변 감사합니다.
답글 아직두 달아주실지 모르겠지만,
ReplyDeleteOleDbConnection,
OleDbCommand,
dataGridView_excel_data 부분이 정의가 안되서 에러나는데,,
using에서 선언해줘야하는거예요??
워낙 초보라서;; 답글 부탁드립니다.
@최인배 - 2010/03/26 00:22
ReplyDelete현재 외부에 나와있어서 정확한 답변을 못드리지만
네 아마도 using을 추가해주셔야합니다.
using System.Data.OleDb
일듯 하네요^^
네 감사합니다, 하나더 질문을 드리고 싶은데,,
ReplyDeletestring conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\sample.xlsx;Extended Properties=""Excel 12.0;HDR=YES;""";
이부분에서 sample.xlsx 파일명과확장자를 텍스트박스로 입력받고싶은데, 아무리해봐도 에러가 계속나네요;;
어떻게 해야하는지.. 좀 가르쳐주세요;;
최인배// 같은 고민하셨네요 ㅎㅎ
ReplyDeletefilePath 뒤에 @이를 더 추가하면 됩니다
----------------------------------------------------------
String excelCon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + @";Extended Properties=""Excel 8.0;HDR=YES""";
잘배웠어요 ㅎ
ReplyDelete@최인배 - 2010/03/26 00:22
ReplyDelete저도 몬가 했더니.. 도구상자에 dataGridView 입니다.
엑셀내용을 이 위에 뿌려주네여~ㅎㅎ
감사합니다. ㅠㅠ
ReplyDelete한참 찾았는데 많은 도움이 되었어요