2012-03-15 13 views
2

こんにちは私は、Excelファイルを自分のdataGridViewに翻訳しようとしていますが、Excelファイルがフォーマットされているため、残りの2つの設定セル。ただし、列名は実際に行番号2にあります。 dataGridViewの列に2番目の行のセル値が表示されるように、ファイルの最初の行をスキップするにはどうすればよいですか?Excelファイルの最初の行をスキップする

現在のコード:THIT Lwinはコメントしているだけのように

var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; data source={0}; Extended Properties=Excel 8.0;", openFileDialog1.FileName); 

string query = String.Format("select * from [{0}$]", "Sheet1"); 
var adapter = new OleDbDataAdapter(query, connectionString); 

DataSet ds = new DataSet(); 

adapter.Fill(ds); 

DataTable dt = ds.Tables[0]; 

techGrid.DataSource = dt; 
+0

のようなあなたが望むように多くの行をスキップすることができます。..最初の行を削除し、2行目を取得して列として作成し、2行目を削除します。 –

答えて

2

。 dtをデータソースとして設定する前に、最初の行を削除します。

DataRow row = dt.Rows[0]; 
dt.Rows.Remove(row); 
techGrid.DataSource = dt; 
+0

私はこれをプログラム的に行う必要があることを理解していますが、このコードでも同じ結果が得られます。 dataGridViewデータdataSourceを設定する前に、その行を適切に削除するにはどうすればよいですか? – ikathegreat

5

プログラムで行を削除するより簡単な方法があります。接続文字列のヘッダー行プロパティを使用します。これは最初の行をスキップする必要があり、そこから残りの行を使って何をすることができます。 ConnectionStrings.comから:

Provider=Microsoft.ACE.OLEDB.12.0; Data Source=myOldExcelFile.xls; 
Extended Properties="Excel 12.0;HDR=YES"; 

"HDR =はい;"最初の行には データではなく、列名が含まれていることを示します。 "HDR =いいえ;反対を示しま​​す。

+0

これはまさに私が探していたものです。ありがとうございます – Esen

8

正確な方法は、ワークシート内のどこに列ヘッダーとデータを見つけるかを正確に伝えることです。シート全体をインポートし、任意のデータ行からヘッダーを再構築しようとすると、深刻な問題が発生することがあります。 OPENQUERYは行の順序を保証しません。テストでは、常に順番にインポートされているように見えますが、マルチボリュームtempdbまたは負荷の高いプロダクションシステムのシステムに移動するとすぐに、インポートは行われず、コードはデータを列ヘッダーとして解釈します。

の代わり:

string query = String.Format("select * from [{0}$]", "Sheet1"); 

使用:

string query = String.Format("select * from [{0}${1}]", "Sheet1","A2:ZZ"); 
+0

このソリューションの唯一の問題は、列の数をZZに制限することです。単純なTopクエリを実行して、限られた行を最初に取り出した後、正しい列の見積もりを取得することができます。しかし、そうしないと、この解決策はほとんどの場合より優れています。ありがとう。 –

0

もしかしてこれ..あなたがprogramticallyしなければならない。この

IEnumerable<DataRow> newRows = dt.AsEnumerable().Skip(numberOfRows); 
DataTable dt2 = newRows.CopyToDataTable(); 
関連する問題