这是大力写的过程1、建立过程: CREATE proc out2xls @服务器名 varchar(255), @库名 varchar(255), @表名 varchar(255), @用户名 varchar(100), @密码 varchar(100), @路径及文件名 varchar(255) as declare @temp1 nvarchar(4000),@temp2 varchar(8000)set @temp1='select @value1='''',@value2='''' select @value1=@value1+'',''''''+a.name+''''+char(39)+'' [''+a.name+'']'',@value2=@value2+'',cast(''+''[''+a.name+'']''+ '' as varchar(200))'' from '+@库名+'..syscolumns a,'+@库名+'..sysobjects d where a.id=d.id and d.name='''+@表名+''''+' order by a.colorder' exec sp_executesql @temp1,N'@value1 nvarchar(4000) output , @value2 varchar(8000) output',@temp1 output,@temp2 outputselect @temp1=right(@temp1,len(@temp1)-1),@temp2=right(@temp2,len(@temp2)-1)exec('select * into '+@库名+'.dbo.中间表 from (select '+ @temp1+' union all SELECT '+@temp2+' FROM '+@库名+'..'+@表名+') tem3') set @temp2='bcp '+@库名+'.dbo.中间表 out '+@路径及文件名+' -c -S'+@服务器名+' -U'+@用户名+' -P'+@密码EXEC master..xp_cmdshell @temp2 exec('drop table '+@库名+'.dbo.中间表') GO2、把你的交叉查询导到一个临时表比如: declare @sql varchar(8000) set @sql = 'select 年份' select @sql = @sql + ',sum(case 季度 when '''+cast(季度 as varchar(10))+''' then 数据 else 0 end) as ['+cast(季度 as varchar(10))+'季度数据]' from (select distinct 季度 from 有一表) as a select @sql = @sql+' into 中间临时表 from 有一表 group by 年份' exec(@sql) go3、调用过程: exec out2xls 'daliserver','pubs','中间临时表','sa','element','c:\a.xls'
不必用语句用DTS导入导出,简单方便!!!!
exec master.cmdshell 'bcp "SettleDB..shamghu" out "c:\a.xls" /S"GNETDATA/GNETDATA" /U"sa" /P"" /w
当然!如果一次性使用,就直接从 excel 中进行查询数据,得到的数据保存为 excel 文件就可以了 如果反复使用,就写程序,用 com 控件
'************************************************************************* '**函 数 名:Tb2Excel '**输 入: sConcStr 数据库连接字符串 '** : sTbName 要导出的表名 '** : sFName excel文件名 '**功能描述:导出数据库中的指定表到excel文件中 '**作 者:邹建 '**日 期:2003年09月10日 '************************************************************************* Sub Tb2Excel(ByVal sConcStr$, ByVal sTbName$, ByVal sFName$) Dim iRe As ADODB.Recordset Dim iExlApp As Object Dim iCol&, iRow&
'打开表 Set iRe = New ADODB.Recordset iRe.CursorLocation = adUseClient iRe.Open sTbName, sConcStr, adOpenKeyset, adLockReadOnly
'创建EXCEL对象 On Error Resume Next Set iExlApp = CreateObject("excel.application") If Err Or (iExlApp Is Nothing) Then Call MsgBox("不能创建Excel对象,请检查是否正确安装了Excel!", vbCritical) Exit Sub End If With iExlApp .Visible = False .Workbooks.Add iRow = 1 For iI = 0 To iRe.Fields.Count - 1 .Cells(iRow, iI + 1) = iRe(iI).Name Next While iRe.EOF = False iRow = iRow + 1 For iI = 0 To iRe.Fields.Count - 1 .Cells(iRow, iI + 1) = iRe(iI) Next iRe.MoveNext Wend .ActiveWorkbook.SaveAs sFName ', -4143 .Quit End With Set iExlApp = Nothing End Sub
直接操作数据库导出到excel文件就可以了!干吗这么复杂啊!
需要引用: Microsoft ActiveX Data Objects 2.xx Libraryxx是你电脑上该对象的版本号,我的引用的是2.5
需要引用: Microsoft ActiveX Data Objects 2.xx Libraryxx是你电脑上该对象的版本号,我的引用的是2.5
CREATE proc out2xls
@服务器名 varchar(255),
@库名 varchar(255),
@表名 varchar(255),
@用户名 varchar(100),
@密码 varchar(100),
@路径及文件名 varchar(255)
as
declare @temp1 nvarchar(4000),@temp2 varchar(8000)set @temp1='select @value1='''',@value2='''' select @value1=@value1+'',''''''+a.name+''''+char(39)+'' [''+a.name+'']'',@value2=@value2+'',cast(''+''[''+a.name+'']''+ '' as varchar(200))'' from '+@库名+'..syscolumns a,'+@库名+'..sysobjects d where a.id=d.id and d.name='''+@表名+''''+' order by a.colorder'
exec sp_executesql @temp1,N'@value1 nvarchar(4000) output , @value2 varchar(8000) output',@temp1 output,@temp2 outputselect @temp1=right(@temp1,len(@temp1)-1),@temp2=right(@temp2,len(@temp2)-1)exec('select * into '+@库名+'.dbo.中间表 from (select '+ @temp1+' union all SELECT '+@temp2+' FROM '+@库名+'..'+@表名+') tem3')
set @temp2='bcp '+@库名+'.dbo.中间表 out '+@路径及文件名+' -c -S'+@服务器名+' -U'+@用户名+' -P'+@密码EXEC master..xp_cmdshell @temp2
exec('drop table '+@库名+'.dbo.中间表')
GO2、把你的交叉查询导到一个临时表比如:
declare @sql varchar(8000)
set @sql = 'select 年份'
select @sql = @sql + ',sum(case 季度 when '''+cast(季度 as varchar(10))+''' then 数据 else 0 end) as ['+cast(季度 as varchar(10))+'季度数据]'
from (select distinct 季度 from 有一表) as a
select @sql = @sql+' into 中间临时表 from 有一表 group by 年份'
exec(@sql)
go3、调用过程:
exec out2xls 'daliserver','pubs','中间临时表','sa','element','c:\a.xls'
excel 中 数据=====》获取数据库数据===》新建数据库查询
就可以了
createoleobject('excel.application')了,这样的程序很多 搜索一下
并不能生成要的文件
如果反复使用,就写程序,用 com 控件
'*************************************************************************
'**函 数 名:Tb2Excel
'**输 入: sConcStr 数据库连接字符串
'** : sTbName 要导出的表名
'** : sFName excel文件名
'**功能描述:导出数据库中的指定表到excel文件中
'**作 者:邹建
'**日 期:2003年09月10日
'*************************************************************************
Sub Tb2Excel(ByVal sConcStr$, ByVal sTbName$, ByVal sFName$)
Dim iRe As ADODB.Recordset
Dim iExlApp As Object
Dim iCol&, iRow&
'打开表
Set iRe = New ADODB.Recordset
iRe.CursorLocation = adUseClient
iRe.Open sTbName, sConcStr, adOpenKeyset, adLockReadOnly
'创建EXCEL对象
On Error Resume Next
Set iExlApp = CreateObject("excel.application")
If Err Or (iExlApp Is Nothing) Then
Call MsgBox("不能创建Excel对象,请检查是否正确安装了Excel!", vbCritical)
Exit Sub
End If
With iExlApp
.Visible = False
.Workbooks.Add
iRow = 1
For iI = 0 To iRe.Fields.Count - 1
.Cells(iRow, iI + 1) = iRe(iI).Name
Next
While iRe.EOF = False
iRow = iRow + 1
For iI = 0 To iRe.Fields.Count - 1
.Cells(iRow, iI + 1) = iRe(iI)
Next
iRe.MoveNext
Wend
.ActiveWorkbook.SaveAs sFName ', -4143
.Quit
End With
Set iExlApp = Nothing
End Sub
Microsoft ActiveX Data Objects 2.xx Libraryxx是你电脑上该对象的版本号,我的引用的是2.5
Microsoft ActiveX Data Objects 2.xx Libraryxx是你电脑上该对象的版本号,我的引用的是2.5