繁体   English   中英

查询以使用OLEDB读取一栏Excel工作表

[英]query to read a column excel worksheet with OLEDB

我是OleDB的新手,正在阅读excel文件。 我有一个包含3列(名称-姓氏-电子邮件地址)的工作表,我需要:

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

我使用一个OpenFileDialog对象(ofd)和一个TextBox(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)要访问表的每个元素(它将仅包含第三列)并将其保存在字符串变量中,我该怎么办?

非常感谢!

要获取工作表名称,可以使用数据提供者的默认getschema功能(connection.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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM