이전 포스트 였던 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 를 얻어 올 수 있습니다.

 

어때요 참 쉽죠?ㅋ

 

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

 

 

 

 

 

신고
Posted by LiveDK

댓글을 달아 주세요

  1. 龍牙 2009.09.10 17:48 신고  댓글주소  수정/삭제  댓글쓰기

    잘 봤습니다.
    그런데 저는 첫번째 열을 적어넣으면 오류가 뜨는군요.
    쌍따옴표가 역슬러쉬 다음에 나와서, 문장으로 인식을 못하네요(땀)

  2. 龍牙 2009.09.11 12:27 신고  댓글주소  수정/삭제  댓글쓰기

    저도 MSDN보고 어떻게 처리 했네요.^^
    답변 감사합니다.

  3. 최인배 2010.03.26 00:22 신고  댓글주소  수정/삭제  댓글쓰기

    답글 아직두 달아주실지 모르겠지만,
    OleDbConnection,
    OleDbCommand,
    dataGridView_excel_data 부분이 정의가 안되서 에러나는데,,
    using에서 선언해줘야하는거예요??
    워낙 초보라서;; 답글 부탁드립니다.

    • DKLEE 2010.03.26 11:29 신고  댓글주소  수정/삭제

      현재 외부에 나와있어서 정확한 답변을 못드리지만
      네 아마도 using을 추가해주셔야합니다.
      using System.Data.OleDb
      일듯 하네요^^

    • 화이트초콜렛 2010.09.28 00:18 신고  댓글주소  수정/삭제

      저도 몬가 했더니.. 도구상자에 dataGridView 입니다.

      엑셀내용을 이 위에 뿌려주네여~ㅎㅎ

  4. 최인배 2010.03.29 00:21 신고  댓글주소  수정/삭제  댓글쓰기

    네 감사합니다, 하나더 질문을 드리고 싶은데,,
    string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\sample.xlsx;Extended Properties=""Excel 12.0;HDR=YES;""";

    이부분에서 sample.xlsx 파일명과확장자를 텍스트박스로 입력받고싶은데, 아무리해봐도 에러가 계속나네요;;

    어떻게 해야하는지.. 좀 가르쳐주세요;;

  5. 노티 2010.03.30 14:08 신고  댓글주소  수정/삭제  댓글쓰기

    최인배// 같은 고민하셨네요 ㅎㅎ

    filePath 뒤에 @이를 더 추가하면 됩니다
    ----------------------------------------------------------

    String excelCon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + @";Extended Properties=""Excel 8.0;HDR=YES""";

  6. 최인배 2010.04.08 00:01 신고  댓글주소  수정/삭제  댓글쓰기

    잘배웠어요 ㅎ

  7. 정쿠 2010.11.08 10:52 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다. ㅠㅠ
    한참 찾았는데 많은 도움이 되었어요

  8. 처리 2011.11.03 10:08 신고  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다~감사요~~~

  9. 처리 2012.03.05 15:32 신고  댓글주소  수정/삭제  댓글쓰기

    데이터 테이블을 그리드에 넣을때 datasource가 정의되지 않는다고 나오는데 왜이러죠??

  10. NBA jersey 2013.07.17 03:23 신고  댓글주소  수정/삭제  댓글쓰기

    당신은 내가사랑할 만한 사람이 아니예요,사랑하지 않으면 안될 사람이예요.

  11. 오로고 2014.06.20 17:06 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다.