无法使用C#从我的Excel文件中读取

时间:2010-07-20 00:19:45

标签: c# ado.net excel-2007

我有一个Excel 2007文件“my.xlsx”和一个名为“States”的工作表,我有以下代码

 using (OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\my.xlsx;Extended Properties='Excel 12.0 Xml;HDR=NO'"))
        {
            OleDbCommand cmd = new OleDbCommand("select * from [States]", con);

            con.Open();
            OleDbDataReader reader = cmd.ExecuteReader();
            while(reader.Read())
                Console.WriteLine(reader[0]);
        }

它不断抛出异常,说“Microsoft Office Access数据库引擎无法找到对象'States'。请确保该对象存在,并且您正确拼写其名称和路径名。”

有人可以帮忙看看我的代码有什么问题吗?

3 个答案:

答案 0 :(得分:4)

我知道这可能并不完全是你想要听到的内容,但是你会遇到很多人,他们一直在努力尝试使用oledb来阅读excel文件......

我使用NPOI这样的库从C#读取Excel文件的运气要多得多:

http://npoi.codeplex.com/(推荐)

http://nexcel.sourceforge.net/

http://sourceforge.net/projects/koogra/

答案 1 :(得分:2)

我认为你需要在创建命令之前打开连接 - 不确定这是不是很重要......

然后在工作表名称的末尾添加$

OleDbCommand cmd = new OleDbCommand("select * from [States$]", con);

基本上[Name]指的是命名范围,而[Name$]指的是工作表。

有关详细信息,请参阅此KB:http://support.microsoft.com/kb/316934

答案 2 :(得分:1)

我只是通过访问此页面来实现它

http://www.davidhayden.com/blog/dave/archive/2006/05/26/2973.aspx

根据我的要求,我只需要阅读一个Excel文件。我搜索过的大多数解决方案都会让你使用某种类型的库,这对我来说太过分了。我真的在寻找一个人来发布一个关于如何阅读文件的代码片段,但我只是在页面上发现了我的链接。