August 24, 2009

C# and Excel (reading)

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

 

어때요 참 쉽죠?ㅋ

 

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

 

 

 

 

 

11 comments:

  1. 잘 봤습니다.

    그런데 저는 첫번째 열을 적어넣으면 오류가 뜨는군요.

    쌍따옴표가 역슬러쉬 다음에 나와서, 문장으로 인식을 못하네요(땀)

    ReplyDelete
  2. @龍牙 - 2009/09/10 17:48
    string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\sample.xlsx;Extended Properties=""Excel 12.0;HDR=YES;""";

    이렇게 한번 해보세요^^ㅎ

    ReplyDelete
  3. @龍牙 - 2009/09/10 17:48
    카피하면서 문제가 있었던거 같네요

    ReplyDelete
  4. 저도 MSDN보고 어떻게 처리 했네요.^^

    답변 감사합니다.

    ReplyDelete
  5. 답글 아직두 달아주실지 모르겠지만,

    OleDbConnection,

    OleDbCommand,

    dataGridView_excel_data 부분이 정의가 안되서 에러나는데,,

    using에서 선언해줘야하는거예요??

    워낙 초보라서;; 답글 부탁드립니다.

    ReplyDelete
  6. @최인배 - 2010/03/26 00:22
    현재 외부에 나와있어서 정확한 답변을 못드리지만

    네 아마도 using을 추가해주셔야합니다.

    using System.Data.OleDb

    일듯 하네요^^

    ReplyDelete
  7. 네 감사합니다, 하나더 질문을 드리고 싶은데,,

    string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\sample.xlsx;Extended Properties=""Excel 12.0;HDR=YES;""";



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



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

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



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

    ----------------------------------------------------------



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

    ReplyDelete
  9. 잘배웠어요 ㅎ

    ReplyDelete
  10. @최인배 - 2010/03/26 00:22
    저도 몬가 했더니.. 도구상자에 dataGridView 입니다.



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

    ReplyDelete
  11. 감사합니다. ㅠㅠ

    한참 찾았는데 많은 도움이 되었어요

    ReplyDelete