2017-05-22 61 views
0

我想從Excel表導入選定的行到datagridview。在我的搜索中,我學到了OLEDB方法來導入數據。我能夠導入的單元格的範圍,但是如果我有一個巨大的Excel表單並且只想導入有限的列,例如c6:c10和d6: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

你可以做的Excel操作的文件,你的任何數據庫上做類似的,所以你可以做的查詢像 SELECT TOP 5 * FROM ..

我不知道讀特定範圍的行,但如果你想讀取最初的行,你可以做類似

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

@pranjal嗨,您的查詢是否已解決? – Krishnan

+0

是我做了什麼,我爲每個單元格範圍分別調用了我的演示讀取函數(RENAMED:Excel_Read)'Excel_Read(textBox1.Text,「Salary Sheet」,「D3」,「E3」,8); Excel_Read(textBox1.Text,「薪資表」,「c5」,「c12」,0);'並將值存儲在列表中。後來使用datatable屬性將其放在datagridview上。 。 –

相關問題