2010-08-05 54 views
0

我遇到問題以檢索Excel工作表中的列名稱。使用reader.GetName和OLEDB讀取列名稱問題Excel提供程序

我有一個Excel工作表,只有3中的第一行中的細胞與這3個值:

  • 在A1

    :甲

  • 在B1:乙

  • 在C1

    : ABC

當我嘗試執行我的方法時,標籤顯示:

  • A,B,A·B·C

而不是:

  • A,B,ABC

我的代碼:

protected void btnExecute_Click(object sender, EventArgs e) 
    { 
     string fullFileName = @"C:\TEST.xls"; 
     List<string> columns = new List<string>(); 

     string connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;", fullFileName); 

     using (OleDbConnection conn = new OleDbConnection(connectionString)) 
     { 
      conn.Open(); 

      // Retrieves the first sheet 
      DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
      string firstSheet = dt.Rows[0]["TABLE_NAME"].ToString(); 

      // Retrieves the list column name 
      string query = string.Format("SELECT TOP 1 * FROM [{0}]", firstSheet); 
      OleDbCommand cmd = new OleDbCommand(query, conn); 
      OleDbDataReader reader = cmd.ExecuteReader(); 
      for (int i = 0; i < reader.FieldCount; i++) 
      { 
       columns.Add(reader.GetName(i)); 
      } 
     } 

     lblCols.Text = string.Join(",", columns.ToArray()); 
    } 

你有解決這個問題的想法嗎?

在此先感謝。

丹尼爾

回答

0

試試這個OleDBAdapter Excel QA我通過堆棧溢出公佈。

我剛剛測試過這個,它從你描述的一個樣本.xls中找到了「A.B.C」。
即將以下內容添加到底部以進行快速測試:

Object o = ds.Tables["xlsImport"].Rows[0]["LocationID"]; 
Object oa = ds.Tables["xlsImport"].Rows[0]["PartID"]; 
Object row0Col3 = ds.Tables["xlsImport"].Rows[0][2]; 

string valLocationID = o.ToString(); 
string valPartID = oa.ToString(); 
string rowZeroColumn3 = row0Col3.ToString(); 
相關問題