2017-05-22 8 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の1つのデータテーブルとして役立ち、私のアプローチも正しいです。私が正しくあなたの問題を理解している場合

答えて

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を調べるべきです。あなたが任意のデータベースにそうであるように、あなたが...

FROM SELECT TOP 5 *のようなクエリを行うことができますので、あなたはエクセルの操作を行うことができます

0

は、私は特定の範囲内の行を読んでわからないです、同様のファイル、しかし、最初の行を読みたい場合は、

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、 "Salary Sheet"、 "c5"、 "c12"、0); 'リストに値を格納しました。後でdatatableプロパティを使用してdatagridviewに配置します。 。 –

関連する問題