【问题标题】:query to read a column excel worksheet with OLEDB查询以使用 OLEDB 读取列 excel 工作表
【发布时间】:2012-06-15 13:29:44
【问题描述】:

我对 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) 访问表格的每个元素(它只包含第三列)并将其保存在字符串变量中我必须做什么?

非常感谢!

【问题讨论】:

    标签: c# excel oledb rowcount


    【解决方案1】:

    要获取工作表名称,您可以使用数据提供者 (connection.getschema) 提供的默认 getschema 功能。 没有列标题(HDR=NO),列被命名为 F1、F2 等,所以你对于第三个字段,你可以在 F3 上查询。如果您想完全确定,您还可以使用getschema 来获取使用第一个getschema 找到的工作表/表格的列名。 最后,要获取字符串列表中的值,您可以使用一些 Linq(参见示例中的字符串列表)。不确定您是否指的是单个字符串值,但如果是这种情况,您可以在 linq 选择上使用 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();
    

    【讨论】:

    • 我添加了它,但他不起作用(“da.Fill(table)”处出错)。那个“表格”字符串是什么?还有“TABLE_NAME”?第一张?这样一来我什么都看不懂。
    • 在 excel 上使用 OLEDB 时,工作表被解释为表格。因此,查询表模式以获取表名,返回工作表名称。 tableschema.Rows[0] 返回包含第一个表信息的数据行。 ["TABLE_NAME"] 调用名为 table_name 的数据行上的列索引,其中包含工作表的名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多