example
*/ ALTER PROCEDURE [dbo].[spDMOExportToExcel] ( @SourceServer VARCHAR(30), @SourceUID VARCHAR(30)=NULL, @SourcePWD VARCHAR(30)=NULL, @QueryText VARCHAR(200), @filename VARCHAR(100), @WorksheetName VARCHAR(100)='Worksheet', @RangeName VARCHAR(80)='MyRangeName' ) AS DECLARE @objServer INT, @objQueryResults INT, @objCurrentResultSet INT, @objExcel INT, @objWorkBooks INT, @objWorkBook INT, @objWorkSheet INT, @objRange INT, @hr INT, @Columns INT, @Rows INT, @Output INT, @currentColumn INT, @currentRow INT, @ResultSetRow INT, @off_Column INT, @off_Row INT, @command VARCHAR(255), @ColumnName VARCHAR(255), @value VARCHAR(255), @strErrorMessage VARCHAR(255), @objErrorObject INT, @Alphabet VARCHAR(27)
SELECT @Alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
IF @QueryText IS NULL BEGIN RAISERROR ('A query string is required for spDMOExportToExcel',16,1) RETURN 1 END
-- Sets the server to the local server IF @SourceServer IS NULL SELECT @SourceServer = @@servername
SET NOCOUNT ON
SELECT @strErrorMessage = 'instantiating the DMO', @objErrorObject=@objServer EXEC @hr= sp_OACreate 'SQLDMO.SQLServer', @objServer OUT
IF @SourcePWD IS NULL OR @SourceUID IS NULL BEGIN --use a trusted connection IF @hr=0 SELECT @strErrorMessage= 'Setting login to windows authentication on ' +@SourceServer, @objErrorObject=@objServer IF @hr=0 EXEC @hr=sp_OASetProperty @objServer, 'LoginSecure', 1 IF @hr=0 SELECT @strErrorMessage= 'logging in to the requested server using windows authentication on ' +@SourceServer IF @SourceUID IS NULL AND @hr=0 EXEC @hr=sp_OAMethod @objServer, 'Connect', NULL, @SourceServer IF @SourceUID IS NOT NULL AND @hr=0 EXEC @hr=sp_OAMethod @objServer, 'Connect', NULL, @SourceServer ,@SourceUID END ELSE BEGIN IF @hr=0 SELECT @strErrorMessage = 'Connecting to '''+@SourceServer+ ''' with user ID '''+@SourceUID+'''', @objErrorObject=@objServer IF @hr=0 EXEC @hr=sp_OAMethod @objServer, 'Connect', NULL, @SourceServer, @SourceUID, @SourcePWD END
--now we execute the query IF @hr=0 SELECT @strErrorMessage='executing the query "' +@querytext+'", on '+@SourceServer, @objErrorObject=@objServer, @command = 'ExecuteWithResults("' + @QueryText + '")' IF @hr=0 EXEC @hr=sp_OAMethod @objServer, @command, @objQueryResults OUT
IF @hr=0 SELECT @strErrorMessage='getting the first result set for "' +@querytext+'", on '+@SourceServer, @objErrorObject=@objQueryResults IF @hr=0 EXEC @hr=sp_OAMethod @objQueryResults, 'CurrentResultSet', @objCurrentResultSet OUT IF @hr=0 SELECT @strErrorMessage='getting the rows and columns "' +@querytext+'", on '+@SourceServer IF @hr=0 EXEC @hr=sp_OAMethod @objQueryResults, 'Columns', @Columns OUT IF @hr=0 EXEC @hr=sp_OAMethod @objQueryResults, 'Rows', @Rows OUT
--so now we have the queryresults. We start up Excel IF @hr=0 SELECT @strErrorMessage='Creating the Excel Application, on ' +@SourceServer, @objErrorObject=@objExcel IF @hr=0 EXEC @hr=sp_OACreate 'Excel.Application', @objExcel OUT IF @hr=0 SELECT @strErrorMessage='Getting the WorkBooks object ' IF @hr=0 EXEC @hr=sp_OAGetProperty @objExcel, 'WorkBooks', @objWorkBooks OUT --create a workbook IF @hr=0 SELECT @strErrorMessage='Adding a workbook ', @objErrorObject=@objWorkBooks IF @hr=0 EXEC @hr=sp_OAGetProperty @objWorkBooks, 'Add', @objWorkBook OUT
--and a worksheet IF @hr=0 SELECT @strErrorMessage='Adding a worksheet ', @objErrorObject=@objWorkBook IF @hr=0 EXEC @hr=sp_OAGetProperty @objWorkBook, 'worksheets.Add', @objWorkSheet OUT
IF @hr=0 SELECT @strErrorMessage='Naming a worksheet as "' +@WorksheetName+'"', @objErrorObject=@objWorkBook IF @hr=0 EXEC @hr=sp_OASetProperty @objWorkSheet, 'name', @WorksheetName
SELECT @currentRow = 1
--so let's write out the column headings SELECT @currentColumn = 1 WHILE (@currentColumn <= @Columns AND @hr=0) BEGIN IF @hr=0 SELECT @strErrorMessage='getting column heading ' +LTRIM(STR(@currentcolumn)) , @objErrorObject=@objQueryResults, @Command='ColumnName(' +CONVERT(VARCHAR(3),@currentColumn)+')' IF @hr=0 EXEC @hr=sp_OAGetProperty @objQueryResults, @command, @ColumnName OUT IF @hr=0 SELECT @strErrorMessage='assigning the column heading '+ + LTRIM(STR(@currentColumn)) + ' from the query string', @objErrorObject=@objExcel, @command='Cells('+LTRIM(STR(@currentRow)) +', ' + LTRIM(STR(@CurrentColumn))+').value' IF @hr=0 EXEC @hr=sp_OASetProperty @objExcel, @command, @ColumnName SELECT @currentColumn = @currentColumn + 1 END
--format the headings in Bold nicely IF @hr=0 SELECT @strErrorMessage='formatting the column headings in bold ', @objErrorObject=@objWorkSheet, @command='Range("A1:' +SUBSTRING(@alphabet,@currentColumn/26,1) +SUBSTRING(@alphabet,@currentColumn % 26,1) +'1'+'").font.bold' IF @hr=0 EXEC @hr=sp_OASetProperty @objWorkSheet, @command, 1 |
手机版|小黑屋|BC Morning Website ( Best Deal Inc. 001 )
GMT-8, 2026-2-5 14:02 , Processed in 0.014910 second(s), 21 queries .
Powered by Discuz! X3.5
© 2001-2026 Discuz! Team.