본문 바로가기
소소한 C# 지식

[C#/WINFORM]-Datagridview Excel Import(엑셀 불러오기)

by 해뤼맘 2022. 4. 20.
728x90
반응형

안녕하세요

지난번엔 C# 프로그램에서 Datagridview의  Excel Export(엑셀 내보내기) 포스팅에 이어

이번에는 Excel Import(엑셀 불러오기) 기능에 대하여 정리해 보았습니다.

 

**Excel Export(엑셀 내보내기) 지난글

2022.04.18 - [소소한 C# 지식] - [c#/WINFORM] - Datagridview Excel Export (엑셀 내보내기)

 

[c#/WINFORM] - Datagridview Excel Export (엑셀 내보내기)

안녕하세요 프로그램에서 Datagridview의 데이터를 엑셀로 내보내기 기능을 많이 사용하여 공통 클래스를 생성 후 호출하여 사용할 수 있도록 코드 정리해 보았습니다. 1. Nuget 패키지 설치 Microsoft.o

harrymom.tistory.com

 

 

1. Excel Import 메서드 생성

  • 파일 이름과, Datagridview 이름을 변수로 받아 옵니다.
  • OleDb를 이용하여 엑셀 데이터를 가져옵니다.
  • OleDb를 이용하면 컴퓨터에 엑셀이 설치되어 있지 않아도 엑셀 데이터를 가져올 수 있고 속도 또한 굉장히 빠릅니다.
 public void ExcelImport(string fileName, DataGridView dgv)
        {
            // 엑셀 문서 내용 추출
            string connectionString = string.Empty;
            string sheetName = string.Empty;

            // 파일 확장자 검사
            if (File.Exists(fileName))  
            {
                if (Path.GetExtension(fileName).ToLower() == ".xls")
                {   // Microsoft.Jet.OLEDB.4.0 은 32 bit 에서만 동작되므로 빌드 할때 반드시 32bit로 할것(64bit로 하면 에러남)
                    connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0};Extended Properties=Excel 8.0;", fileName);
                }
                else if (Path.GetExtension(fileName).ToLower() == ".xlsx")
                {
                    connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0};Extended Properties=Excel 12.0;", fileName);
                }
            }

            using (OleDbConnection con = new OleDbConnection(connectionString))
            {
                using (OleDbCommand cmd = new OleDbCommand())
                {
                    cmd.Connection = con;
                    con.Open();
                    DataTable dtExcelSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    sheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
                    con.Close();
                }
            }

            DataSet data = new DataSet();
            DataTable dt = new DataTable();
			
            //엑셀 시트 이름 설정
            string strQuery = "SELECT * FROM [" + sheetName + "]";   
            OleDbConnection oleConn = new OleDbConnection(connectionString);
            oleConn.Open();

            OleDbCommand oleCmd = new OleDbCommand(strQuery, oleConn);
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(oleCmd);

            DataTable dataTable = new DataTable();
            dataAdapter.Fill(dataTable);
            data.Tables.Add(dataTable);

            //datagridview에 datatable(엑셀 데이터) 담기
            dgv.DataSource = dataTable;

            dataTable.Dispose();
            dataAdapter.Dispose();
            oleCmd.Dispose();

            oleConn.Close();
            oleConn.Dispose();


        }

 

2. Excel Import 버튼 클릭 이벤트 추가

  • Excel Import 메서드 호출
private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                //파일 선택 창 오픈
                using (OpenFileDialog dlg = new OpenFileDialog())
                {
                    //파일 형식 필터
                    dlg.Filter = "Excel Files(2007이상)|*.xlsx|Excel Files(97~2003)|*.xls";
                    if (dlg.ShowDialog() == DialogResult.OK)
                    {
                        //파일 위치 선택 후 Ok 클릭 했을 경우 Import 메서드를 호출
                        ExcelImport(dlg.FileName, dgvtest);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                throw;
            }
        }

4. Excel Import 결과

  • Excel Import 버튼 클릭
  • import 하고자 하는 파일 선택
  • Datagridview에 Excel Import 완료

Excel Import
Excel Import

 

excel import 탐색기 창
excel import 탐색기 창

 

Exel Import 결과
Exel Import 결과

 

728x90
반응형

댓글