2011-02-10 2 views
2

良い古いOleDBConnectionsとOleDBCommandsを使用してExcelファイルを読んでいます。どのようにしてExcelシートの使用範囲を特定するのですか?私は相互運用性を使用した場合C#とOleDBを使用してExcelを読み込む - 使用範囲を特定するにはどうすればよいですか?

例えば、私はいつもこれを行うことができます -

Excel.Application xlApp = new Excel.Application(); 
Excel.Workbook xWb; 
Excel.Worksheet xWs; 
Excel.Range range; 

xWb = xlApp.Workbooks.Open(@"D:\Technical\C#\WorkingFolder\HelloWorld.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
xWs = (Excel.Worksheet)xWb.Worksheets.get_Item(1); 
range = xWs.UsedRange; 

は今、私はすべて使用される列のリストを取得します。 OleDBでは、どうすれば入手できますか?今、私が列リストを釘付けにしていたとしても、行がここで終わるのをどうやって知っていますか?

基本的に私の要件はこれです。

Excel(2003)ファイルを受信しようとしています。データには常にヘッダー(列名)が含まれます。これは、A1からデータが常に入力されることを意味するものではありません。J200

また、A5:J204からのものでもあります。

ので、

string sConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Technical\C#\WorkingFolder\HelloWorld.xls;Extended Properties=""Excel 8.0;HDR=YES;"""; 
string sCommandString = "SELECT Employee_Id, First_Name FROM [Sheet1$A1:J200]"; 
OleDbConnection xlConnection = new OleDbConnection(sConnectionString); 
xlConnection.Open(); 
OleDbCommand xlCommand = new OleDbCommand(sCommandString, xlConnection); 
OleDbDataAdapter tempDataAdapter = new OleDbDataAdapter(); 
tempDataAdapter.SelectCommand = xlCommand; 
DataTable tempDataTable = new DataTable("Whatever_I_Want"); 
tempDataAdapter.Fill(tempDataTable); 

をOleDbCommandを使用して、ライン

sCommandStringは、A1のハードコードされた値を持っている:J200は、私が受け取るExcelはA5とデータ範囲を持っている場合はどのような:204、どのような私はしますか?

助けがあれば助かります。

+0

こんにちはどのようにこれを解決しましたか? oledbを使用して範囲を取得するためのサンプルコードを投稿できますか? – Govind

答えて

2
未確認

が、私は、あなたが最初のSELECT * FROM [Sheet]文でDataAdapterを作成することによって、それを行うことができると思うとはFillSchemaへの呼び出しで、その後あなたはDataTableあなただけいっぱいに.Columns.Countを呼び出すことができる必要があることを使用します。

+0

私はあなたの答えを試みましたが、DataTableでColumns.Countを使用することによって、私は整数値だけを得ています。同じように行数。私はA1:B5のような範囲を得ることができないのですか? – Govind

関連する問題