1:用select语句将数据库数据导出到excel,可以灵活的用sql语句设计你想要的结果集

View Code
declare 
        @server sysname,
    @uname sysname,
    @pwd sysname,
    @QueryText varchar(
200), 
        @filename varchar(
200) ,
    @hr int,
    @SQlServer int ,
    @result_str varchar(
255),
     @QueryResults int,
        @CurrentResultSet int,
        @
object int,
        @WorkBooks int,
        @WorkBook int,
        @Range int ,
    @Columns int,
        @Rows int,
        @indColumn int,
        @indRow int,
        @off_Column int,
        @off_Row int,
        @code_str varchar(
100)


set @server='cnby\sql2000' 
set @uname='sa'
set @pwd='****'
set @QueryText='SELECT * FROM pubs..authors'
set  @filename ='f:\ImportToExcel.xls'

-- set the server to the local server 
if @server is null set @server=@@servername
--set the username to the current user name
if @uname is null set @uname=system_user 
set nocount on 
 exec @hr
=sp_oacreate 'SQLDMO.SQLServer',@SQLServer out
 
if @hr<>0 
 
begin
    print 
'error create SQLDMO.sqlserver'
    return
end
-- connect to the SQL Server 
 
if @pwd is null
    
begin
    exec @hr
=sp_oamethod @sqlserver,'Connect',null,@server,@uname
    return
    
end
else
    
begin
    exec @hr
=sp_oamethod @sqlserver,'Connect',null,@server,@uname,@pwd
    
if @hr<>0
    
begin
    print 
'error connect'
    return
    
end
end 
--set queryText 
SELECT @result_str 
= 'ExecuteWithResults("' + @QueryText + '")'

exec @hr
=sp_OAMethod @SQLServer,@result_str,@QueryResults out
--参数说明:ole令牌,函数名,输出值
if @hr<>0
begin
    print 
'error with method executeWithResults'
    return 
end 

exec @hr
=sp_oamethod @queryResults,'CurrentResultSet',@CurrentResultSet out
if @hr<>0
BEGIN
    PRINT 
'error get CurrentResultSet'
    RETURN
END



EXEC @hr 
= sp_OAMethod @QueryResults, 'Columns', @Columns OUT
IF @hr 
<> 0
BEGIN
    PRINT 
'error get Columns'
    RETURN
END
 print 
'@Columns'+str(@Columns)  --9
EXEC @hr 
= sp_OAMethod @QueryResults, 'Rows', @Rows OUT
IF @hr 
<> 0
BEGIN
    PRINT 
'error get Rows'
    RETURN
END
 print 
'@rows'+str(@rows)  --23

EXEC @hr 
= sp_OACreate 'Excel.Application', @object OUT
IF @hr 
<> 0
BEGIN
    PRINT 
'error create Excel.Application'
    RETURN
END

EXEC @hr 
= sp_OAGetProperty @object'WorkBooks', @WorkBooks OUT
IF @hr 
<> 0
BEGIN
    PRINT 
'error create WorkBooks'-- 83820286
    RETURN
END

EXEC @hr 
= sp_OAGetProperty @WorkBooks, 'Add', @WorkBook OUT
IF @hr 
<> 0
BEGIN
    PRINT 
'error with method Add'
    RETURN
END
 print 
'@WorkBook'+str(@WorkBook)

EXEC @hr 
= sp_OAGetProperty @object'Range("A1")', @Range OUT
IF @hr 
<> 0
BEGIN
    PRINT 
'error create Range'
    RETURN
END




SELECT @indRow 
= 1
SELECT @off_Row 
= 0
SELECT @off_Column 
= 1

WHILE (@indRow 
<= @Rows)
BEGIN
SELECT @indColumn 
= 1

WHILE (@indColumn 
<= @Columns)  --循环列
BEGIN

    EXEC @hr 
= sp_OAMethod @QueryResults, 'GetColumnString', @result_str OUT, @indRow, @indColumn
    IF @hr 
<> 0
    BEGIN
        PRINT 
'error get GetColumnString'
        RETURN
    END

    EXEC @hr 
= sp_OASetProperty @Range, 'value', @result_str
    IF @hr 
<> 0
    BEGIN
        PRINT 
'error set value'
        RETURN
    END

    EXEC @hr 
= sp_OAGetProperty @Range, 'Offset', @Range OUT, @off_Row, @off_Column
    IF @hr 
<> 0
    BEGIN
        PRINT 
'error get Offset'
        RETURN
    END

    SELECT @indColumn 
= @indColumn + 1

END

SELECT @indRow 
= @indRow + 1
SELECT @code_str 
= 'Range("A' + LTRIM(str(@indRow)) + '")'
EXEC @hr 
= sp_OAGetProperty @object, @code_str, @Range OUT
IF @hr 
<> 0
BEGIN
    PRINT 
'error create Range'
    RETURN
END

END

SELECT @result_str 
= 'exec master..xp_cmdshell ''del ' + @filename + ''', no_output'
EXEC(@result_str)
SELECT @result_str 
= 'SaveAs("' + @filename + '")'
EXEC @hr 
= sp_OAMethod @WorkBook, @result_str
IF @hr 
<> 0
BEGIN
    PRINT 
'error with method SaveAs'
    RETURN
END

EXEC @hr 
= sp_OAMethod @WorkBook, 'Close'
IF @hr 
<> 0
BEGIN
    PRINT 
'error with method Close'
    RETURN
END

EXEC @hr 
= sp_OADestroy @object
IF @hr 
<> 0
BEGIN
    PRINT 
'error destroy Excel.Application'
    RETURN
END

EXEC @hr 
= sp_OADestroy @SQLServer
IF @hr 
<> 0
BEGIN
    PRINT 
'error destroy SQLDMO.SQLServer'
    RETURN
END

2:excel 表导入到数据库表中,不能定义表的结构,而且把第一行当做列了,很郁闷


select * into test(你的数据库表名) from openrowset
('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=f:\ImportToExcel.xls', 'select * from [sheet1$]')

[sheet1$],excel的表名, $符合不能去掉哦,

 

posted on 2011-04-01 14:23  cnby  阅读(1656)  评论(0编辑  收藏  举报