比如一张Excel文件里,有sheet1、sheet2、sheet3等等张Excel页,如何写SQL语句,返回这些Excel页,~~~~~急,在线等,问题解决,马上放分!!!!注意,不是查询某一张表的数据,而是返回表名,,,

解决方案 »

  1.   

    SQLServer获取Excel中所有Sheet 收藏 
    E盘根目录新建一个Excel文件aa.xls后测试如下代码use tempdb 
    go 
    if (object_id ('udf_getExcelTableNames' ) is not null )
        drop function dbo .udf_getExcelTableNames 
    go 
    create function udf_getExcelTableNames (@filename varchar (1000 ))
    returns @t table (id int , name varchar (255 ))
    as 
    begin 
        declare    
        @error int , @obj int , @c int , @sheetname varchar (255 ) , @sheetstring varchar (255 )
       
        exec @error = sp_oacreate 'Excel.Application' , @obj   out   
        exec @error = sp_oamethod @obj , 'Workbooks.Open' , @c out , @filename 
        exec @error = sp_oagetproperty @obj , 'ActiveWorkbook.Sheets.Count' , @c    out 
        while (@c > 0 )
        begin 
            set @sheetstring = 'ActiveWorkbook.Sheets(' + ltrim (@c )+ ').Name' 
            exec @error = sp_oagetproperty @obj , @sheetstring , @sheetname    out 
            insert into @t select @c , @sheetname 
            set @c = @c - 1 
        end 
        exec @error = sp_oadestroy @obj   
        return 
    end 
    go select * from dbo .udf_getExcelTableNames ('e:\aa.xls' )/*--测试结果 
    3    Sheet3 
    2    Sheet2 
    1    Sheet1 
    */ 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jinjazz/archive/2009/08/31/4503535.aspx
      

  2.   

     select * from opendatasource
     ( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\test2.xls";User ID=Admin;Password=;Extended properties=Excel 8.0')...[sheet1$]
    测试没问题
      

  3.   

    if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N '[dbo].[f_sheetname] ')   and   xtype   in   (N 'FN ',   N 'IF ',   N 'TF ')) 
    drop   function   [dbo].[f_sheetname] 
    GO /*--得到Excel文件中的所有工作表名 --邹建   2004.04--*/ /*--调用示例 
    select   *   from   f_sheetname( 'c:\a.xls ') 
    --*/ 
    create   function   f_sheetname( 
    @ExcelFname   nvarchar(260) 
    )returns   @re   table(id   int   identity(1,1),sheetname   nvarchar(100)) 
    as 
    begin 
    declare   @err   int,@src   varchar(255),@desc   varchar(255) 
    declare   @obj   int,@icount   int,@sheetname   varchar(200) exec   @err=sp_oacreate   'Excel.Application ',@obj   out 
    if   @err <> 0   goto   lb_err exec   @err=sp_oamethod   @obj, 'Workbooks.Open ' 
    ,@icount   out 
    ,@ExcelFname 
    if   @err <> 0   goto   lb_err exec   @err=sp_oagetproperty   @obj, 'ActiveWorkbook.Sheets.Count ',@icount   out 
    if   @err <> 0   goto   lb_err 
    while   @icount> 0 
    begin 
    set   @src= 'ActiveWorkbook.Sheets( '+cast(@icount   as   varchar)+ ').Name ' 
    exec   @err=sp_oagetproperty   @obj,@src,@sheetname   out 
    if   @err <> 0   goto   lb_err 
    insert   @re   values(@sheetname) 
    set   @icount=@icount-1 
    end exec   @err=sp_oadestroy   @obj 
    goto   lb_re lb_err: 
    exec   sp_oageterrorinfo   0,@src   out,@desc   out 
    insert   @re 
    select   cast(@err   as   varbinary(4))   as   错误号 
    union   all   select   @src   as   错误源 
    union   all   select   @desc   as   错误描述 
    lb_re: 
    return 
    end 
    go 
      

  4.   

    ----------------------------------------------------------- happyflystone-- 2010.04-- 转载注明出处--->http://blog.csdn.net/happyflystone-- 取得指定excel文件内的sheet数及每一个sheet的列数。------------------------------------------------------  CREATE PROC sp_operate_excel@excelfilename NVARCHAR(100),@strErrorMessage VARCHAR(1000) OUTASBEGIN    SET NOCOUNT ON    DECLARE @hr INT;    DECLARE @objExcel INT;    DECLARE @objWorkBooks INT;    DECLARE @objWorkBook INT;    DECLARE @cmd NVARCHAR(4000);    DECLARE @i INT,@j int;    DECLARE @IndexCount int;    DECLARE @sheetname varchar (255 ) ;    SET @strErrorMessage = '';    DECLARE @tb TABLE(id INT identity,sheetname VARCHAR(100),colnums int);    --创建Excel.Application对象    EXEC @hr = sp_OACreate 'Excel.Application',@objExcel OUTPUT;    IF @hr = 0    BEGIN       --创建Workbooks对象        EXEC @hr = sp_OAGetProperty @objExcel,'Workbooks',@objWorkbooks OUTPUT;        IF @hr = 0         BEGIN           --分解                       --打开Excel文件           SET @cmd = 'Open("'+@excelfilename+'")';            EXEC @hr = sp_OAMethod @objWorkbooks,@cmd,@objWorkBook OUTPUT;           IF @hr = 0           BEGIN               SET @i = 1;               EXEC @hr = sp_oagetproperty @objWorkbook , 'Sheets.Count' , @IndexCount OUT               --循环多少个Sheet               WHILE @i <= @IndexCount               BEGIN                   SET @cmd = 'Sheets('+ltrim(@i)+').Name';                   EXEC @hr = sp_OAGetProperty @objWorkbook,@cmd,@sheetname OUT--@objSheet OUTPUT;                        SET @cmd = 'Sheets('+ltrim(@i)+').UsedRange.cells.Count'                   EXEC @hr = sp_OAGetProperty @objWorkbook,@cmd,@j OUTPUT;                            INSERT @tb SELECT @sheetname,@j                                    SET @i = @i +1;                          END                   END        END       ELSE             SET @strErrorMessage = '创建工作薄对象失败!';    END    ELSE       SET @strErrorMessage = '创建Excel对象失败!'        IF @hr = 0        EXEC @hr = sp_OAMethod @objExcel,'Quit';        --消除Excel对象    IF @hr = 0        EXEC @hr = sp_OADestroy @objWorkbooks;        IF @hr = 0         EXEC @hr = sp_OADestroy @objExcel;    select * from @tbENDGO  DECLARE @RET VARCHAR(100)EXEC sp_operate_excel 'C:\BOOK1.XLS',@RET OUT /*id          sheetname       colnums     ----------- ------------ ----------- 1           Sheet1            42           Sheet2            23           Sheet3            5 */ DROP PROC  sp_operate_excel本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/happyflystone/archive/2010/04/01/5442014.aspx
      

  5.   

    有如下错误:
    消息 229,级别 14,状态 5,第 1 行
    拒绝了对对象 'sp_OACreate' (数据库 'mssqlsystemresource',架构 'sys')的 EXECUTE 权限。
    ====???