if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_Excel_RANGE]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_Excel_RANGE]
GO/*--得到Excel文件中的指定单元格的数据

因为引用了Excel.Application,所以速度不会快
--邹建 2004.04--*//*--调用示例
select dbo.f_Excel_RANGE('c:\aa.xls','B2')
--*/
create function f_Excel_RANGE(
@ExcelFname nvarchar(260),
@Range varchar(4)
)returns varchar(8000)
as
begin
declare @err int,@src varchar(255),@desc varchar(255)
declare @obj int,@icount int,@sheetname varchar(200)
declare @re varchar(8000) 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

set @src='ActiveSheet.Range("'+@Range+'").Value'
exec @err=sp_oagetproperty @obj,@src,@re out

exec @err=sp_oamethod @obj,'Workbooks.Close'
if @err<>0 goto lb_err exec @err=sp_oadestroy @obj
goto lb_re

lb_err:
exec sp_oageterrorinfo 0,@src out,@desc out
set @re='错误号:'+cast(@err as varchar)+'
错误源:'+@src+'
错误描述:'+@desc
lb_re:
return(@re)
end
go