查询读取与OLEDB excel工作表的列

我是全新的OleDB和阅读Excel文件。 我有一个工作表3列(姓名 – 电子邮件地址),我需要:

  • 知道行号
  • 阅读第三栏中的所有地址
  • 逐一提取每个地址

我使用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 …”中的查询问题。 我通常阅读这种types的查询:

 "SELECT * FROM [Sheet1$]" 

但是我找不到Sheet1$ 。 有人可以解释我正确的查询?

2)要访问表(它将只包含第三列)的每个元素,并将其保存在一个stringvariables,我必须做什么?

非常感谢!

要获取图纸名称,您可以使用数据提供程序(connection.getschema)中的默认getschemafunction。 如果没有列标题(HDR = NO),这些列被命名为F1,F2等,所以你可以在第三个字段查询F3。 如果你想完全确定,你也可以使用getschema来获取第一个getschemafind的表/表的列名。 最后,要获取string列表中的值,可以使用一些Linq(请参阅示例中的string列表)。 不知道你的意思是在一个单一的string值,但如果是这样的话,你可以在linq select上使用一个string.join。

组合码开始forms连接开放:

  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();