2017-10-27 3 views
2

"SP $"というExcelシートから最初の列の値を取得しようとしています。OleDBでExcelシート(拡張子.xlsm)から最初の列の値を取得

string path = @"C:\Users\atsurkanu\Desktop" + @"\TemplateClientExtraction_IDEAFIMIT_Conero_QUARTER_20170127.xlsm"; 
string connectionString = string.Format(@"provider=Microsoft.ACE.OLEDB.12.0;data source={0};Extended Properties=Excel 12.0;", path); 
string sheetName = "SP$"; 

と、このようないくつかのコード:

は、私はパスしてい

using (OleDbConnection con = new OleDbConnection(connectionString)) 
     { 
      try 
      {     
       var dataTable = new DataTable(); 

       con.Open(); 
       var tableschema = con.GetSchema("Tables"); 
       var firstsheet = tableschema.Rows[0]["SP$"].ToString(); 
       string name_query = "SELECT A4 FROM [" + firstsheet + "]"; 
       OleDbDataAdapter da = new OleDbDataAdapter(name_query, con); 
       da.Fill(dataTable); 
       con.Close(); 

をしかし、それは動作しません。どうか、猫がExcelシートから最初の列を取得する方法を教えてください。

UPDATE: 私はそれがどのように動作するかわからないが、それは役立ちます:

var dataTable = new DataTable(); 

       con.Open(); 
       var tableschema = con.GetSchema("Tables"); 

       // To get the first sheet name you use the first row and the column named TABLE_NAME 
       var firstsheet = tableschema.Rows[0]["TABLE_NAME"].ToString(); 

       string name_query = "SELECT F1 FROM [" + "SP$" + "] WHERE F1 <> ''"; 
       OleDbDataAdapter da = new OleDbDataAdapter(name_query, con); 
       da.Fill(dataTable); 

       foreach (DataRow dataRow in dataTable.Rows) 
       { 
        foreach (var item in dataRow.ItemArray) 
        { 
         listWithElementsFromSPfirstColumn.Add((string)item); 
        } 
       } 
+0

正確には機能しません。エラーや例外はありますか? – andrews

+0

A4とSP $は何ですか?それらは検索するセルとテーブルとして使用するシートの名前を表しますか? – Steve

+0

A4 - データの取得を開始したい呼び出しの名前(A4 - > A5 - > A6)と同様です。理由はA1、A2、A3が空であるからです。 SP $ - スプレッドシート内のシートの名前。また、私は名前が付いたシートを持っています:コスト、ビルディングなど。 –

答えて

0

あなたが「A4」を使用し、OLEDBはエクセルの行/列の規則を理解していることを期待することはできません。 OleDbの場合、シートは単なるDataTableであり、すべてをロードするか、取得する行をフィルタリングするWHERE条件を指定する必要があります。

シートにHEADERがあるかどうかは不明です。 HDR = NOまたはHDR = YESキーを接続文字列に追加する必要があります。ヘッダーが欠落している場合、OleDbはF1、F2、F3などの列名を自動的に割り当てます。 だから、あなたは今、それがデータテーブルを読み、列F1のコンテンツを使用するのはあなた次第です。このようなもので、あなたのシートを照会したり、列A

using (OleDbConnection con = new OleDbConnection(connectionString)) 
{ 
    try 
    {     
     var dataTable = new DataTable(); 

     con.Open(); 
     var tableschema = con.GetSchema("Tables"); 

     // To get the first sheet name you use the first row and the column named TABLE_NAME 
     var firstsheet = tableschema.Rows[0]["TABLE_NAME"].ToString(); 

     string name_query = "SELECT F1 FROM [" + firstsheet + "] WHERE F1 <> ''"; 
     OleDbDataAdapter da = new OleDbDataAdapter(name_query, con); 
     da.Fill(dataTable); 
    } 
    catch ..... 
} 

のヘッダにF1を変更することができます( Excel用の列)

関連する問題