zoukankan      html  css  js  c++  java
  • 使用 OpenRowSet 和 OpenDataSource 访问 Excel 97-2007

    必要的环境说明

    接口类型

    有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet

    引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎)。 Jet 引擎大家都很熟悉,可以访问 Office 97-2003,但不能访问

    Office 2007。 ACE 引擎是随 Office 2007 一起发布的数据库连接组件,既可以访

    问 Office 2007,也可以访问 Office 97-2003。 另外:Microsoft.ACE.OLEDB.12.0 可以访问正在打开的 Excel 文、

    件,而 Microsoft.Jet.OLEDB.4.0 是不可以的。

    本实例用sql语句在SqlServer里面完成对数据的导入操作。 在本实例开始之前,可能需要先安装AccessDatabase引擎包 (本人机器64位,安装的是32位的office组件,所以需要另外安装

    office驱动引擎包(此引擎包作用在于使得office系统文件与

    office应用程序之间进行数据传输) - 此步骤中需要先卸载32位

    office组件,否则会提示驱动安装不成功) 本人所用引擎包下载地址如下: http://www.microsoft.com/zh-cn/download/details.aspx?id=13255

    安装完成后,具体配置可以这里配,建议如非必要,默认就好

    OpenRowSet需要的访问接口是:Microsoft.Jet.OLEDB.4.0

    下图是使用OpenDataSource必要访问接口:Microsoft.ACE.OLEDB.12.0

    openrowset的写法

    --3,链接Excel Microsoft Jet 4.0 OLE DB Provider
    --读Excel数据,注意Excel必须事先关闭
    select * 
    from
    openrowset('Microsoft.Jet.OLEDB.4.0','Excel 8.0;HDR=Yes;DATABASE=E:/Temp/myExcel20131212.xls', Sheet1$) 
    
    --将数据写入Excel2003文件
    --注意:首先需要对Excel的Sheet1的第一行设置与检索列相等的一些值,可以是任意值,
    --但最好与列名相同;另外oledb可能对Excel没有写权限,需要对Excel表格的属性--》安全中加一个everyone权限
    insert  into   
    OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;HDR=Yes;DATABASE=E:/Temp/myExcel20131212.xls',Sheet1$)   
    select *  from  dbo.DQuestionData

    opendatasource的写法

    select * 
    from
    opendatasource('Microsoft.Jet.OLEDB.4.0','Excel 8.0;HDR=Yes;DATABASE=E:/Temp/myExcel20131212.xls')...Sheet1$

    上面的代码是链接Excel2003的,对于Excel2007的链接 ,由于oledb提供程序不同,所以链接方式会不同。

    下面附一个不同的链接方式,也是从网上找到的

    --> Jet 引擎访问 Excel 97-2003  
    select * from OpenRowSet('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;HDR=Yes;IMEX=1;Database=D:/97-2003.xls', 'select * from [Sheet1$]')  
    select * from OpenRowSet('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;HDR=Yes;IMEX=1;Database=D:/97-2003.xls', [Sheet1$])  
    select * from OpenDataSource('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;HDR=Yes;IMEX=1;Database=D:/97-2003.xls')...[Sheet1$]  
    select * from OpenDataSource('Microsoft.Jet.OLEDB.4.0', 'Data Source=D:/97-2003.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"')...[Sheet1$]  
      
    --> ACE 引擎访问 Excel 97-2003  
    select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:/97-2003.xls', 'select * from [Sheet1$]')  
    select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:/97-2003.xls', [Sheet1$])  
    select * from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:/97-2003.xls')...[Sheet1$]  
    select * from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Data Source=D:/97-2003.xls;Extended Properties="Excel 12.0;HDR=Yes;IMEX=1"')...[Sheet1$]  
      
    --> ACE 引擎访问 Excel 2007  
    select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:/2007.xlsx', 'select * from [Sheet1$]')  
    select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:/2007.xlsx', [Sheet1$])  
    select * from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:/2007.xlsx')...[Sheet1$]  
    select * from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Data Source=D:/2007.xlsx;Extended Properties="Excel 12.0;HDR=Yes;IMEX=1"')...[Sheet1$]

    注:
    HDR=Yes/No
    可选参数,指定 Excel 表的第一行是否列名,缺省为 Yes,可以在注册表中修改缺省的行为。
    IMEX=1
    可选参数,将 Excel 表中混合 Intermixed 数据类型的列强制解析为文本。


    以下是我自己尝试测试的一些代码
    --表不存在,查询excel数据插入到表data_dq [Sheet1$]:excel表的工作区的名字,$不能忘记
    select * into data_dq from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Data Source=D:/2007.xlsx;Extended Properties="Excel 12.0;HDR=Yes;IMEX=1"')...[Sheet1$]

    --表存在,查询excel数据插入到指定表中
    insert into 表名(列名称...) select * into data_dq from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Data Source=D:/2007.xlsx;Extended Properties="Excel 12.0;HDR=Yes;IMEX=1"')...[Sheet1$]

    --仅查询excel数据
    select * from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Data Source=D:/2007.xlsx;Extended Properties="Excel 12.0;HDR=Yes;IMEX=1"')...[Sheet1$]
  • 相关阅读:
    【重点】Java大厂面试10个知识点汇总
    TEC-2机微程序设计
    Component 'TABCTL32.OCX'错误的处理方法
    Azure DevOps的使用入门
    Mac + VMware Fusion + Windows 11尝鲜
    Golang接口类型-下篇
    Golang接口类型-上篇
    基于Python实现原生的登录验证码
    一套帮助你理解C语言的测试题(转)
    KMP算法详解
  • 原文地址:https://www.cnblogs.com/seven1314pp/p/9873300.html
Copyright © 2011-2022 走看看