--得到Excel文件中的所有工作表名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 lberrexec @err=sp_oamethod @obj,'Workbooks.Open'
,@icount out
,'c:\csdn.xls'  --*****************************你的Excel文件名
if @err<>0 goto lberrexec @err=sp_oagetproperty @obj,'ActiveWorkbook.Sheets.Count',@icount out
if @err<>0 goto lberr
select @icount
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 lberr
print @sheetname
set @icount=@icount-1
endexec @err=sp_oadestroy @obj
returnlberr:
exec sp_oageterrorinfo 0,@src out,@desc out
select cast(@err as varbinary(4)) as 错误号
,@src as 错误源,@desc as 错误描述

解决方案 »

  1.   

    --改成函数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
      

  2.   

    我知道了在ODBC中可以使用"TABLE"来获取Excel中所有的表.(用GetTables函数)MSDN也说可以用"SYSTEM TABLE"来获取所有的Sheet, 可是我发现没有办法用.
      

  3.   

    0x800401F3 ODSOLE Extended Procedure  Invalid class string
    怎么回事啊?
      

  4.   

    有个限制:要求xls文件在数据库服务器上
      

  5.   

    对,xls文件必须在数据库服务器上.如果你是在程序中来获取,就没必要用那个函数,直接用程序就行啦.那样更方便.