我是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)访问表的每个元素(它只包含第三列)并将其保存在字符串变量中我必须做什么?
非常感谢!
答案 0 :(得分:4)
要获取工作表名称,您可以使用数据提供程序(connection.getschema)中的默认getschema功能。 如果没有列标题(HDR = NO),列将命名为F1,F2等,因此您可以在第三个字段中查询F3。如果你想完全确定,你也可以使用getschema来获取第一个getschema找到的工作表/表的列名。 最后,要获取字符串列表中的值,可以使用一些Linq(请参阅示例中的stringlist)。不确定你是否意味着单个字符串值,但如果是这种情况,你可以在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();