none
求助:为什么C#连接Excel2010不成功? RRS feed

  • 问题

  • 我使用的是vs2010,今天在读取excel2003数据成功,获取到了表标签名称;后来测试连接Excel2010时没有成功,无法获取到表标签名称。我的连接字符串是:OleDbConnection conn= new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strPath + ";Extended Properties='Excel 12.0 Xml;HDR=No;IMEX=1;'");

    //测试是否连接成功:

    conn.Open();

    if (conn.State == ConnectionState.Open)
                {
                   
                    MessageBox.Show("打开excel2010成功");          

               }
                else
                {
                    MessageBox.Show("打开excel2010失败");
                }

    }

    求高手指点。

    2012年4月17日 4:38

全部回复

  • 你好

    不知道會不會是Connection string的問題呢

    我嘗試過是沒有問題的

    可以嘗試以下的Sample Code試試看

    OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Password=;User ID=;Data Source=d:\\test.xlsx;Mode=Share Deny Write;Extended Properties=\"HDR=YES;\";Jet OLEDB:Engine Type=37");
    
                try
                {
                    con.Open();
                    if (con.State == ConnectionState.Open)
                    {
                        MessageBox.Show("yes");
                    }
                    else
                    {
                        MessageBox.Show("no");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

    Please correct me if my concept is wrong



    Chi

    2012年4月17日 7:37
    版主
  • 谢谢ChiYau的帮助。我自己也找到了个原因,不知道怎么回事。我之前安装了AccessDatabaseEngine_X64(我是64位系统),在项目--属性--生成,目标平台里,选择any CPU或 X64就可以读取Excel2010的数据,而不能读取excel2003的数据啦;反之,如果调整成x86就可以读取Excel2003,不能读取excel2010。请问,有没有什么好的办法或程序解决判断如果是".xlsx"就选择X64,否则就选择X86。或者有什么更好的解决方案呢。乞解,感谢不吝指教。

    ChiYau 的头像

    ChiYau

    MVP

    16,700 分数1361
    近期成就
    论坛内容鉴别者 II有建议性的解答者 I移动主题者 II
    2012年4月17日 7:51
  • 你好

    或者你可以嘗試當檔案是XLS 時改變Connection String 看看1

    E.g.

    1.  connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +  
    2.             fileName + ";Extended Properties=Excel 8.0;";  

    使用Microsoft.Jet.OLEDB.4.0

    看看能不能解決這個問題

    Please correct me if my concept is wrong


    Chi

    2012年4月17日 11:17
    版主
  • 你好

    或者你可以嘗試當檔案是XLS 時改變Connection String 看看1

    E.g.

    1.  connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +  
    2.             fileName + ";Extended Properties=Excel 8.0;";  

    使用Microsoft.Jet.OLEDB.4.0

    看看能不能解決這個問題

    Please correct me if my concept is wrong


    Chi


    你好,我已经设计了一个根据不同的扩展名,选择不同的Connection String,问题仍然如上,还得另外手动去改变目标平台(.xlsx选择X64,XLS选择X86)。会不会是我有哪里的设置不正确呢?不能同时兼容Xls和xlsx真是麻烦(选择any Cpu也不行)。
    2012年4月18日 8:55