数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
SQL Server 与 Excel

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

/*
存储过程名称:导出数据到Excel
功能描述:导出数据到Excel

EXEC ExportToExcel @server = '.',
                   @uname = 'sa',
                   @pwd = '',
                   @QueryText = 'SELECT * FROM dldata..bbbbbb',
                   @filename = 'd:\ImportToExcel.xls'
*/

IF OBJECT_ID('ExportToExcel') IS NOT NULL DROP PROC ExportToExcel
GO

CREATE PROCEDURE ExportToExcel (
  @server sysname = null,
  @uname sysname = null,
  @pwd sysname = null,
  @QueryText varchar(200) = null,
  @filename varchar(200) = 'd:\ImportToExcel.xls'
)
AS
DECLARE @SQLServer int, --SQLDMO.SQLServer对象
        @QueryResults int, --QueryResults对象
        @CurrentResultSet int,
        @object int, --Excel.Application对象
        @WorkBooks int,
        @WorkBook int,
        @Range int,
        @hr int,
        @Columns int,
        @Rows int,
        @indColumn int,
        @indRow int,
        @off_Column int,
        @off_Row int,
        @code_str varchar(100),
        @result_str varchar(255)

IF @QueryText IS NULL
BEGIN
   PRINT 'Set the query string'
   RETURN
END

--设置服务器名为本地服务器(@@servername返回运行SQL Server的本地服务器名称)
IF @server IS NULL SELECT @server = @@servername

--设置用户名为当前系统用户名(使用SYSTEM_USER返回当前系统用户名)
IF @uname IS NULL SELECT @uname = SYSTEM_USER

SET NOCOUNT ON

--创建SQLDMO.SQLServer对象
EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @SQLServer OUT
IF @hr <> 0
BEGIN
   PRINT 'error create SQLDMO.SQLServer'
   RETURN
END

--连接到SQL Server系统
IF @pwd IS NULL
BEGIN
   EXEC @hr = sp_OAMethod @SQLServer, 'Connect', null, @server, @uname
   IF @hr <> 0
   BEGIN
      PRINT 'error Connect'
      RETURN
   END
END
ELSE
BEGIN
   EXEC @hr = sp_OAMethod @SQLServer, 'Connect', null, @server, @uname, @pwd
   IF @hr <> 0
   BEGIN
      PRINT 'error Connect'
      RETURN
   END
END

--The ExecuteWithResults method executes a Transact-SQL command batch
--returning batch result sets in a QueryResults object
SELECT @result_str = 'ExecuteWithResults("' + @QueryText + '")'
EXEC @hr = sp_OAMethod @SQLServer, @result_str, @QueryResults OUT
IF @hr <> 0
BEGIN
    PRINT 'error with method ExecuteWithResults'
    RETURN
END

--The CurrentResultSet property controls access to the result sets of a QueryResults object
EXEC @hr = sp_OAMethod @QueryResults, 'CurrentResultSet', @CurrentResultSet OUT
IF @hr <> 0
BEGIN
   PRINT 'error get CurrentResultSet'
   RETURN
END

--The Columns property exposes the number of columns contained
--in the current result set of a QueryResults object
EXEC @hr = sp_OAMethod @QueryResults, 'Columns', @Columns OUT
IF @hr <> 0
BEGIN
   PRINT 'error get Columns'
   RETURN
END

--The Rows property returns the number of rows in a referenced
--query result set or the number of rows existing in a table
EXEC @hr = sp_OAMethod @QueryResults, 'Rows', @Rows OUT
IF @hr <> 0
BEGIN
   PRINT 'error get Rows'
   RETURN
END

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

--获得Excel工作簿对象
EXEC @hr = sp_OAGetProperty @object, 'WorkBooks', @WorkBooks OUT
IF @hr <> 0
BEGIN
   PRINT 'error create WorkBooks'
   RETURN
END

--在工作簿对象中加入一工作表
EXEC @hr = sp_OAGetProperty @WorkBooks, 'Add', @WorkBook OUT
IF @hr <> 0
BEGIN
   PRINT 'error with method Add'
   RETURN
END

--Range对象(A1单元格)
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
      --The GetColumnString method returns a QueryResults object result set member converted to a String value
      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) --如果存在@filename文件,则先删除
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
GO

 




相关文章

相关软件