2012-06-15 57 views
0

我是全新的OleDB和閱讀excel文件。我有3列(名字 - 姓氏 - 電子郵件地址)工作表,我需要:查詢閱讀與OLEDB的專欄excel工作表

  • 知道的行數
  • 一個讀取所有的地址,在第三列
  • 提取一個每個地址

我使用OpenFileDialog對象(ofd)和文本框(excel)來顯示選定的文件。這是我的代碼:

if (ofd.ShowDialog() == DialogResult.OK) 
      { 
       excel.Text = ofd.FileName; 
       connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excel.Text + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO;IMEX=1\""; 
       conn.ConnectionString = connection; 
       conn.Open(); 
       string name_query = "SELECT A FROM[" + ofd.SafeFileName + "]"; 
       OleDbDataAdapter da = new OleDbDataAdapter(name_query, conn); 
       da.Fill(table); 
       conn.Close(); 
       j = table.Rows.Count; 
      } 

它不起作用,在「FROM ...」查詢問題。我經常讀這種類型的查詢:

"SELECT * FROM [Sheet1$]" 

,但我找不到什麼Sheet1$到底是。有人可以向我解釋正確的查詢嗎?

2)要訪問表的每個元素(它只包含第三列)並將其保存在字符串變量中,我必須做什麼?

非常感謝!

回答

3

要獲取圖紙名稱,您可以使用數據提供程序(connection.getschema)中的默認getschema功能。 沒有列標題(HDR = NO),這些列被命名爲F1,F2等,因此您可以在第三個字段中查詢F3。如果您想完全確定,您還可以使用getschema獲取第一個getschema找到的表/表的列名。 最後,要獲取字符串列表中的值,可以使用一些Linq(請參閱示例中的字符串列表)。不知道你的意思是在一個單一的字符串值,但如果是這樣的話,你可以在linq select上使用一個string.join。

組合編號的起始形式連接口:

 conn.Open(); 
     var tableschema = conn.GetSchema("Tables"); 
     var firstsheet = tableschema.Rows[0]["TABLE_NAME"].ToString(); 
     string name_query = "SELECT F3 FROM [" + firstsheet + "]"; 
     OleDbDataAdapter da = new OleDbDataAdapter(name_query, conn); 
     da.Fill(table); 
     conn.Close(); 
     j = table.Rows.Count; 
     var stringlist = table.Rows.Cast<DataRow>().Select(dr => dr[0].ToString()).ToList(); 
+0

我加了,但他不工作(錯誤在「da.Fill(表)」)。什麼是「表」字符串?和「TABLE_NAME」? Firstsheet?這樣我就無法理解一件事。 –

+0

在excel上使用OLEDB時,表單被解釋爲表格。因此,查詢表格名稱的tableschema將返回表格名稱。 tableschema.Rows [0]返回包含第一個表信息的數據行。 [「TABLE_NAME」]調用名稱爲table_name的數據行中的列索引,其中包含工作表的名稱。 –

+0

關於錯誤:什麼是錯誤消息? –