小弟现在在学习SQLSERVER,学到用SQLSERVER读到Excel文件中的数据,现在E盘下有一个222.xlsx文件(office2007的,文件后缀名多一个X)读数据的脚本如下:SELECT * 
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="E:\222.xlsx";User ID=Admin;Password=;Extended properties=Excel 8.0')...[Sheet$]
先说一下自己的操作步骤:
1.先跑脚本如下:--启用Ad Hoc Distributed Queries:
exec sp_configure 'show advanced options',1
reconfigure
2.跑脚本SELECT * 
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="E:\222.xlsx";User ID=Admin;Password=;Extended properties=Excel 8.0')...[Sheet$]跑完步骤2出现了错误提示
链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "外部表不是预期的格式。"。
消息 7303,级别 16,状态 1,第 1 行
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。
在网上查了很多东东,都只放一段脚本,运行后也基本有错误,搞了好长时间了,请各位帮忙高手解决

解决方案 »

  1.   

    E:\222.xlsx,这个另存为兼容excl 97-2003的格式,即文件后缀名应该是xls,而不是xlsx
      

  2.   

    --試試看
    SELECT * 
    FROM OpenDataSource ( 'Microsoft.ACE.OLEDB.12.0',
      'Data Source="E:\222.xlsx";User ID=Admin;Password=;Extended properties=Excel 12.0')...[Sheet$]
      

  3.   

    换'Microsoft.ACE.OLEDB.12.0'的试试吧。
      

  4.   


    运行以后,出错别外一个错误
    链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 返回了消息 "无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开。"。
      

  5.   


    按照您说的做了一遍,也出现了错误
    链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开。"。
    消息 7399,级别 16,状态 1,第 2 行
    链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 报错。身份验证失败。
    消息 7303,级别 16,状态 1,第 2 行
    无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。
      

  6.   

    把桌面打开的excel文件关闭了再试试。
      

  7.   

    你导入的时候,这个excl是不是同时被打开了
      

  8.   

    暂且试试,把sql连接的密码暂时清空,再去导入,导入完成后,再修改回密码
      

  9.   

    当程序用ado的jet4.0方式连接mdb数据库的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”。ADOConnection.ConnectionString= "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False; Password=Psd;Data Source=filename.mdb" 
    不能用Password的形式定义数据库密码,应该改成: 
    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=filename.mdb ;Persist Security Info=False;Jet OLEDB:Database Password=Psd  参考一下面的
      

  10.   

    --excel 2007
    select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=C:\xxxx.xlsx', 'select * from [Sheet1$]')
    肯定可行的...
      

  11.   

    如果是64位的OFFICE2003以上版本,参考http://blog.csdn.net/claro/archive/2011/05/07/6401819.aspx