當前位置:首頁 » 編程語言 » 從sql取數生成excel報表
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

從sql取數生成excel報表

發布時間: 2022-04-23 22:56:46

Ⅰ 在sql中如何將查詢結果直接導出為EXCEL表格

SQL Server有一些工具可用來導出和導入數據。這些簡單的工具,例如T-SQL的BULK INSERT語句,或者是BCP工具,都可以將數據以純文本文件的形式傳輸。如果需要處理任何一種其他類型的文件的導入導出,則我們必須使用DTS設計器或者DTS向導構建一個DTS包。最終生成的DTS包是一個我們必須測試、維護和操作的獨立的對象。而傳輸數據的工作則變得更加復雜,即使我們只是想要將一個簡單的Excel文件傳輸到文件系統中。

這里,我建議使用一個簡單,但是很有用的T-SQL 存儲程序,它可以通過使用鏈接伺服器(linked server)技術將數據導出到Excel 中。

為了實現導出,你必須首先創建一個空的有固定名字的Excel文件,並將其放置在伺服器上。我把它命名為Empty.xls,並放置在c:temp的目錄下。這個文件不會被刪除,並且在裝入數據之前,作為目標Excel文件的模板使用。

Empty.xls文件被構建的時候,只含有一個工作頁,名為ExcelTable,其中的第一行(僅有的一行)包含如下字母: A,B,C,...Z。這些字母可作為Excel表的列名稱。這意味著在一個查詢中,我們可以導出26個列。(給定的存儲程序代碼可被修改,以支持結果集中含有更多的列的情況。只需要在Excel模板中簡單地書寫F1, F2 ,F3...,然後更改程序中相應列的列表即可反映出變化了。)

sp_write2Excel是一個T-SQL存儲過程,它獲取目標Excel文件的名字和路徑,結果集中列的數量,以及T-SQL查詢。在查詢中應該使用轉換函數將所有的非字元串數據導入列中,因為最終的Excel單元中數據實際上都是字元串格式的。

這個過程將empty.xls模板文件拷貝到新的目標Excel文件中。然後它再構建一個鏈接伺服器到剛才的文件中,並使用動態的T-SQL來構建這個Excel文件,並且使用插入/選擇語句來將數據寫入其中。

以下是程序代碼:
Create proc sp_write2Excel (@fileName varchar(100),
@NumOfColumns tinyint,
@query varchar(200))
as
begin
declare @dosStmt varchar(200)
declare @tsqlStmt varchar(500)
declare @colList varchar(200)
declare @charInd tinyint

set nocount on

-- 構建列的列表 A,B,C ...
-- 直到達到列的數量.

set @charInd=0
set @colList = 'A'
while @charInd < @NumOfColumns - 1
begin
set @charInd = @charInd + 1
set @colList = @colList + ',' + char(65 + @charInd)
end

-- 創建一個空的Excel 文件作為目標文件,通過拷貝模板Excel 文件來命名
set @dosStmt = ' c:tempempty.xls ' + @fileName
exec master..xp_cmdshell @dosStmt

-- 創建一個「臨時」的鏈接伺服器到剛才的文件中,以用於「導出」數據
EXEC sp_addlinkedserver 'ExcelSource',
'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
@fileName,
NULL,
'Excel 5.0'

-- 構建一個T-SQL 語句,用於實際導出查詢結果
-- 到目標鏈接伺服器上的表中
set @tsqlStmt = 'Insert ExcelSource...[ExcelTable$] ' + ' ( ' + @colList + ' ) '+ @query

print @tsqlStmt

-- 執行動態的 TSQL語句
exec (@tsqlStmt)

-- 刪除鏈接伺服器
EXEC sp_dropserver 'ExcelSource'
set nocount off
end
GO

程序使用實例:
Use master
go
exec sp_write2Excel
--目標excel文件
'c:tempNorthProcts.xls' ,

-- 結果中列的數量
3,

-- 將要導出結果的查詢
'select convert(varchar(10),ProctId),
ProctName,
Convert (varchar(20),UnitPrice) from Northwind..Procts'

結論,這個程序可作為一個通用的工具將數據導出到Excel工作頁中,而BCP工具則只能將數據導出到文本文件中。

我們可以使用這個程序來代替DTS包設計器,以及DTS向導,每當需要調用這樣的動作的時候,都可以用它將數據導出到excel 文件中。

Ⅱ 怎樣用SQL命令生成Excel表格

--如果從SQL資料庫中,導出數據到Excel,如果Excel文件已經存在,而且已經按照要接收的數據創建好表頭,就可以簡單的用:
insert into OPENROWSET( 'MICROSOFT.JET.OLEDB.4.0 '
, 'Excel 5.0;HDR=YES;DATABASE=c:\test.xls ',sheet1$)
select * from 表

--如果Excel文件不存在,也可以用BCP來導成類Excel的文件,注意大小寫:
--導出表的情況
EXEC master..xp_cmdshell 'bcp 資料庫名.dbo.表名 out "c:\test.xls " /c -/S "伺服器名 " /U "用戶名 " -P "密碼 " '

--導出查詢的情況
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname " queryout "c:\test.xls " /c -/S "伺服器名 " /U "用戶名 " -P "密碼 " '

Ⅲ 怎麼使用Excel提取sql server資料庫數據,自動生成報表求大神解答,萬分感謝。

你可以先設計一個視圖View 就是你報表需要的額數據 然後導出數據到excel

Ⅳ 我想知道把數據從資料庫中取出之後,怎麼做能到處Excel表格或Word

一般的軟體都會在「預覽」里吧,預覽上方會有一個「保存報表」,旁邊的向下箭頭所指的地方就是到處excel表格,你可以試一下。你的問題確實不完整,因為我們並不知道你的軟體是用的什麼樣子的,不管怎麼樣我盡力啦哈哈

Ⅳ SQL資料庫的表裡面的數據怎麼導出到EXCEL裡面

ASP實例代碼,直接將資料庫中的數據導出到EXCEL電子表中:

<!--#includefile="../conn.asp"-->
<%
dims,sql,filename,fs,myfile,x
Setfs=server.CreateObject("scripting.filesystemobject")
'--假設你想讓生成的EXCEL文件做如下的存放
filename=Server.MapPath("users.xls")
'--如果原來的EXCEL文件存在的話刪除它
iffs.FileExists(filename)then
fs.DeleteFile(filename)
endif
'--創建EXCEL文件
setmyfile=fs.CreateTextFile(filename,true)

'Setrs=Server.CreateObject("ADODB.Recordset")
'--從資料庫中把你想放到EXCEL中的數據查出來
'sql="select*fromTb_Execlorderbyiddesc"
'rs.Opensql,conn
StartTime=Request("StartTime")
EndTime=Request("EndTime")
StartEndTime="AddTimebetween#"&StartTime&"00:00:00#and#"&EndTime&"23:59:59#"

strSql="select*frommyeky_myusr"
SetrstData=conn.execute(strSql)
ifnotrstData.EOFandnotrstData.BOFthen

dimtrLine,responsestr
strLine=""
ForeachxinrstData.fields
strLine=strLine&x.name&chr(9)
Next

'--將表的列名先寫入EXCEL
myfile.writelinestrLine

DowhileNotrstData.EOF
strLine=""

foreachxinrstData.Fields
strLine=strLine&x.value&chr(9)
next
myfile.writelinestrLine

rstData.MoveNext
loop

endif

Response.Write"生成EXCEL文件成功,點擊<ahref=""users.xls""target=""_blank"">下載</a>!"

rstData.Close
setrstData=nothing
Conn.Close
SetConn=nothing
%>

Ⅵ VB 從SQL資料庫中把數據導出到Excel表格中,怎麼寫

SubdataToExcel()
DimconnAsString
DimrsAsNewADODB.Recordset
DimexcelAsObject
DimworkbookAsObject
DimsheetAsObject
Dimi&,j&
'SQL資料庫的連接字串
conn="Provider=SQLOLEDB.1;Datasource=伺服器地址;initialcatalog=資料庫名稱;UserId=資料庫登錄賬號;Password=資料庫登錄賬號"
'打開到sql的連接,讀取xxx表數據到rs
rs.Open"select*fromxxx",conn,adOpenKeyset,adLockReadOnly
'excel對象、工作簿、工作表
Setexcel=CreateObject("Excel.Application")
Setworkbook=excel.workbooks().Add()
Setsheet=workbook.sheets(1)
excel.Visible=True
'循環讀取rs並寫入到excel
Fori=1Tors.Fields.Count
j=1
rs.MoveFirst
DoWhileNotrs.EOF
sheet.cells(j,i)=rs.Fields(i-1).Value
rs.MoveNext
j=j+1
Loop
Next
rs.Close
Setrs=Nothing

EndSub

Ⅶ 怎麼從mysql資料庫導出數據成excel表格

方法一
用mysql的命令和shell
select * into outfile './bestlovesky.xls' from bestlovesky where 1 order by id desc limit 0, 50;
方法二
把bestlovesky.xls以文本方式打開,然後另存為,在編碼選擇ansi編碼,保存
echo "select id,name from bestlovesky where 1 order by id desc limit 0, 50;"| /usr/local/mysql/bin/mysql -h127.0.0.1-uroot -p123456 > /data/bestlovesky.xls
方法三
mysql -uroot -p -e "select * from test.table2 " > d:a.xsl

Ⅷ 如何使用C#從資料庫中提取數據並利用Excel做成報表

可以先做成報表,再導出成Excel

關鍵字:rdlc

Ⅸ 怎樣將sql server2008中的資料庫導出成excel表格

用SQL Server 2008中的導入/導出工具,數據源為SQL Server ,目標為Excel。