2017-05-22 9 views
0

Excel에서 선택한 행을 DataGridview로 가져 오려고합니다. 내 검색에서 OLEDB 방법이 데이터를 가져올 수 있음을 알게되었습니다. 내가 가져올 수있는 셀 범위는 거대한 엑셀 시트가 있고 제한된 열만 가져올 수 있습니다 (예 : c10 : d10 : d10). 그것을 어떻게 성취 할 수 있습니까? 내 코드는 다음과 같습니다 :C# : excel 시트에서 datagridview로 여러 데이터 선택

public void demoread (string FileName, string SheetName, string StartCell, string EndCell) 
{ 
    System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
    System.Data.DataTable dt = new System.Data.DataTable(); 
    OleDbConnection cn = new OleDbConnection { ConnectionString = ConnectionString(FileName, "No") }; 

    try 
    { 
     List<string> jop = new List<string>(); 
     cn.Open(); 
     string SelectStatement = string.Format(@"SELECT * FROM [{0}${1}:{2}]", SheetName, StartCell, EndCell); 
     //OleDbDataAdapter mydataadapter = new OleDbDataAdapter("Select * from [" + "Salary Sheet" + "$B4:H10 +$c7:c10]", cn); 
     //mydataadapter.Fill(dt); 
     //dataGridView1.DataSource = dt; 
     //string[] data = dt.; 

     OleDbCommand cmd = new OleDbCommand { CommandText = SelectStatement,Connection = cn }; 
     OleDbDataReader dr = cmd.ExecuteReader(); 

      if (dr.HasRows) 
      { 
       while (dr.Read()) 
       { 

       for (int i = 0; i < 100; i++) 
       { 

        MessageBox.Show(dr.GetString(0)); 
        jop[i] = dr.GetString(0).ToString(); 
        // MessageBox.Show(dr.GetString(0)); 

        // dataGridView1.DataSource = dr; 
       } 
       } 
      } 
      else 
      { 
       //Console.WriteLine("No rows!!!"); 
      } 

    } 
    catch(Exception er) 
    { 
     MessageBox.Show(er.ToString()); 
    } 
}  

코멘트 나는 oledbdataadapter 명령으로 시도했습니다. 나는 심지어 특정 목록에 결과를 저장하여 나중에 나만의 클럽에서 datagridview.please의 하나의 데이터 테이블로 사용하여 내 접근 방식이 올바른지 확인하려고 시도했습니다. 내가 제대로 문제를 이해하는 경우

답변

0

다음은, 당신이 원하는 무엇을 얻을 것이다 : 접근이 정확한지 여부를 정말 응용 프로그램 및 요구 사항에 따라 달라집니다

string excelConnectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\...\\Book2.xlsx;Extended Properties=\"Excel 12.0 Xml;HDR=NO\";"; 

OleDbConnection objConn = new OleDbConnection(excelConnectString); 
OleDbCommand objCmd1 = new OleDbCommand("Select * From [Sheet1$C6:C10]", objConn); 
OleDbCommand objCmd2 = new OleDbCommand("Select * From [Sheet1$D6:D10]", objConn); 

OleDbDataAdapter objDatAdap = new OleDbDataAdapter(); 
objDatAdap.SelectCommand = objCmd1; 
DataTable dt = new DataTable(); 
objDatAdap.Fill(dt); 

objDatAdap.SelectCommand = objCmd2; 
DataTable dt2 = new DataTable(); 
objDatAdap.Fill(dt2); 

dt.Merge(dt2); 

합니다. 단지 데이터를 읽는 중이면 OleDb을 사용하는 것이 좋습니다. 그러나 사용 된 스타일과 그 이상에 대해 알고 싶다면 OleDb은 짧아서 OpenXML을 살펴 봐야합니다.

0

당신은 엑셀에서 작업이 어떤 데이터베이스처럼 유사한 파일을 할 수 있습니다, 그래서 당신은 FROM SELECT의 TOP 5 * 같은 쿼리를 수행 할 수 있습니다 ..

나는, 특정 범위의 행을 읽는 확실하지 않다 그러나 초기 행을 읽으려는 경우 다음과 같이 할 수 있습니다.

string SelectStatement = string.Format(@"SELECT TOP {0} * FROM [{1}${2}:{3}]", numOfTopRowsToRead, SheetName, StartCell, EndCell); 
+0

안녕하십니까, 쿼리가 해결 되었습니까? – Krishnan

+0

예. 각 셀 범위 'Excel_Read (textBox1.Text, "Salary Sheet", "D3", "E3", 8)에 대해 별도로 데모 읽기 함수 (RENAMED : Excel_Read)를 호출했습니다. Excel_Read (textBox1.Text, "Salary Sheet", "c5", "c12", 0); 및 목록에 값을 저장합니다. 나중에 datatable 속성을 사용하여 datagridview에 저장합니다. . –